Java IO流之字节缓冲流

版权声明:LemonSnm https://blog.csdn.net/LemonSnm/article/details/89815911

1.缓冲流: 

为了解决对文件或其他目标频繁的读写操作,效率低,性能差的问题。

使用缓冲流的好处:

解决在写入文件操作时,频繁的操作文件所带来的性能降低问题,能够更高效的读写信息

缓冲流原理:

将数据先缓冲起来,然后一起写入或者读取出来 

2.BufferedOutputStream

通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统 

 BufferedOutputStream内部默认的缓存大小是8kb,每次写入时存储到缓存中的byte数组中,当数组存满时,会把数组中的数据写入文件,并且缓存下标归零  

3.BufferedInputStream

为另一个输入流添加一些功能,在创建BufferedInputStream时,会创建一个内部缓冲区数组,用于缓冲数据

4.代码示例: 

package com.lemon;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
 * 缓存的目的:
 * 解决在写入文件操作时,频繁的操作文件所带来的性能降低问题
 * BufferedOutputStream内部默认的缓存大小是8kb,每次写入时存储到缓存中的byte数组中,当数组存满时,会把数组中的数据写入文件
 * 并且缓存下标归零 
 * @author lemonSun
 *
 * 2019年5月4日下午8:12:53
 */
public class BufferStreamDemo {

	public static void main(String[] args) {
	//	byteWriter();
	//	byteReader();
		byteReader1();
	}
	
	//缓存流输入 不用关闭 try自动关闭 必须实现Closeable接口
	private static void byteReader1(){
		//目标文件
		File file = new File("F:\\javatest\\lemon1.txt");
		
		//buf作用域在try大括号里面多条语句try(;),;隔开 
		try(BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file))) {	
			byte[] bytes = new byte[1024];
			int len = -1;
			while((len = buf.read(bytes)) != -1) {
				System.out.println(new String(bytes,0,len));
			}
		
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	//缓存流输入
	private static void byteReader(){
		//目标文件
		File file = new File("F:\\javatest\\lemon1.txt");
		
		try {
			//字节输出流
			InputStream in = new FileInputStream(file);
			//字节缓冲流
			BufferedInputStream buf = new BufferedInputStream(in);
			byte[] bytes = new byte[1024];
			int len = -1;
			while((len = buf.read(bytes)) != -1) {
				System.out.println(new String(bytes,0,len));
			}
			buf.close();//自动关闭 in.close
		
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	
	//缓存流输出
	private static void byteWriter(){
		//目标文件
		File file = new File("F:\\javatest\\lemon1.txt");
		
		try {
			//字节输出流
			OutputStream out = new FileOutputStream(file,true);
			//缓冲流
			BufferedOutputStream buf = new BufferedOutputStream(out);
			//内容
			String info = "这里是缓冲流\r\n";
			//写入
			buf.write(info.getBytes());
			buf.close(); //jdk1.7以后自动关闭 out
		//	out.close();
				
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

猜你喜欢

转载自blog.csdn.net/LemonSnm/article/details/89815911