为什么字节流不用flush_五节课带你走入IO流之一缓冲流

e1942da11c971f2b73e37a90a5eab44c.png

第三节 缓冲流

2.1缓冲字节BufferedInputStream和BufferedOutputStream

【示例6】复制文件(使用缓冲流字节流提高效率)

public class TestCopy5 {
 public static void main(String[] args) throws IOException {
 //1.创建一个输入流和输出流
 InputStream fis = 
 new FileInputStream(new File("e:/JDK_API.CHM"));
      OutputStream fos = 
 new FileOutputStream(new File("e:/JDK_API2.CHM"));
//默认输入缓冲区大小8192
      BufferedInputStream bis = new BufferedInputStream(fis); 
//默认输出缓冲区大小8192
 BufferedOutputStream bos = new BufferedOutputStream(fos); 
        //2.使用输入流和输出流完成文件复制
        //2.1准备一个中转站(水杯)
 int n;
 //2.2先读一个字节
 n = bis.read();//读取一个字节,赋给n
 while(n != -1){
 //在控制台显示该字节
            //System.out.println((char)n);
            //2.3再写一个字节
 bos.write(n);
 //2.4在读一个字节
 n = bis.read();
        }
 //3.关闭输入流和输出流
        //bos.flush();
 bis.close();
        bos.close();
    }
}

• 缓冲流的原理 内部有一个类型为byte 长度默认是8192的数组 作为缓冲区

• 只要关闭高层流即可,底层流不用手动关闭;因为高层的关闭方法就是把底层流关闭

• 如何刷新输出缓冲区(让缓冲区内容写入硬盘,保证一致)

• 满了就自动刷新

• bos.close() 先flush,再关闭

• 手动刷新 flush()

2.2缓冲字符流BufferedReader和BufferedWriter

• 问题:之前的文件读写都是按照字节、字符或者数组来实现的,对于文本文件而言,能否按照行,一行行读写呢。

• 提供了BufferedReader和BufferedWriter实现按行读写

【示例7】复制文件(按行读写)

public class TestCopy6 {
 public static void main(String[] args) throws IOException {
 //创建两个流
 BufferedReader br = 
 new BufferedReader(new FileReader(new File("e:/sqlnet.log")));
        BufferedWriter bw = 
 new BufferedWriter(new FileWriter("e:/sqlnet2.log"));
 
 //使用两个流完成按行读取的功能
        //中转站就是一个字符串,存储一行数据
        //先读一行
 String str =  br.readLine();
 while(str != null ){
 //再写一行
 bw.write(str);
 //bw.write("rn");不同操作系统中换行符是不同的
 bw.newLine();
 //再读一行
 str = br.readLine();//!!!
 }
 //关闭两个流
 br.close();
        bw.close();
    }
}

总结1:BufferedReader和BufferedWriter的优点

1.速度快 
2.简化编程 

总结2:readLine()底层的原理

底层还是一个一个字符的读取,append()放入到StringBuilder(或者char[] )中,
遇到换行符 ,将StringBuilder(char[])转换成String并返回

总结3:不同的操作系统中换行符是不同的

Unix系统里,每行结尾只有“<换行>”,即“n”; 
Windows系统里面,每行结尾是“<回车><换行>”,即“rn”; 
Mac系统里,每行结尾是“<回车>”,即“r”。

本节需知

1. 缓冲流的原理

2. BufferedReader的readLine()方法的原理

3. 使用缓冲字节流复制文件

4. 使用缓冲字符流按行复制文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值