2022.5.5 I/O 字节缓冲流
字节缓冲流
缓冲流:BufferedInputStream/ BufferedOutputStream
-
提高IO效率,减少访问磁盘次数
-
数据存储在缓冲区中,flush是将缓冲区的内容写入文件中,也可以直接close
BufferedInputStream内部有一个缓冲区,默认大小为8M,每次调用read方法的时候,它首先尝试从缓冲区里读取数据,若读取失败(缓冲区无可读数据),则选择从物理数据源(譬如文件)读取新数据(这里会尝试尽可能读取多的字节)放入到缓冲区中,最后再将缓冲区中的内容部分或全部返回给用户.由于从缓冲区里读取数据远比直接从物理数据源(譬如文件)读取速度快,所以BufferedInputStream的效率很高!
字节缓冲流读文件(放到缓冲区在读)
1 package com.xing; 2 3 import java.io.BufferedInputStream; 4 import java.io.FileInputStream; 5 import java.io.IOException; 6 7 public class Demo04 { 8 public static void main(String[] args) throws IOException { 9 //输入流 底层流 10 FileInputStream fis = new FileInputStream("d:\\aaa.txt"); 11 //缓冲流 12 BufferedInputStream bis = new BufferedInputStream(fis); //放到缓冲区 13 14 //读取:fis.read()从硬盘读 bis.read()从缓冲区读 内部自己的缓冲区 15 int data = 0; 16 while ((data = bis.read())!=-1) { 17 System.out.print((char)data); 18 } 19 20 //相当于用数组作为缓冲区 21 byte[] bytes = new byte[1024]; 22 int count = 0; 23 while ((count = bis.read(bytes)) != -1) { 24 System.out.println(new String(bytes,0,count)); 25 } 26 //关闭缓冲流即可 27 bis.close(); 28 } 29 }
字节缓冲流写文件(先写入缓冲区,在由缓冲区写到磁盘)
1 package com.xing; 2 3 import java.io.BufferedOutputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 8 public class Demo05 { 9 public static void main(String[] args) throws IOException { 10 //输出流 11 FileOutputStream fos = new FileOutputStream("d:\\buffer.txt"); 12 //缓冲流 13 BufferedOutputStream bos = new BufferedOutputStream(fos); 14 15 //写入文件 16 for (int i = 0; i < 10; i++) { 17 //字符串的getBytes()方法返回字节数组 18 bos.write("helloworld\n".getBytes());//写入到8K缓冲区 19 //bos.flush();//刷新到硬盘 20 } 21 //关闭 内部调用flush() 所以不写上边也没事 22 bos.close(); 23 } 24 }


浙公网安备 33010602011771号