缓冲处理流

1、缓冲处理流:BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream

2、通过构造器,传入节点流

(1)BufferedReader 本类组合

private Reader in;

(2)BufferedWriter 本类组合

private Writer out;

(3)BufferedInputStream 继承父类 FilterInputStream

protected volatile InputStream in;

(4)BufferedOutputStream 继承父类 FilterOutputStream

protected OutputStream out;

3、内部组合缓冲区数组,构造器可以指定缓冲区大小,默认大小 8192

(1)BufferedReader

private char cb[];

(2)BufferedWriter

private char cb[];

(3)BufferedInputStream

protected volatile byte buf[];

(4)BufferedOutputStream

protected byte buf[];

4、输入流的抽象父类:OutputStream、Writer,都定义 flush 方法,所有的输入流都没有 flush 方法

5、Writer 的子类 / 组合缓冲数组的流,需要 flush 才能输出写入

6、调用 close / 缓冲区数组写满时,会自动调用 flush

7、关闭 BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream,只需要关闭外层流即可,底层自动关闭节点流

 

(例)拷贝文本

try (BufferedReader br = new BufferedReader(new FileReader("C://fileRead.txt"));
     BufferedWriter bw = new BufferedWriter(new FileWriter("D://fileWrite.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {//边读边写
        bw.write(line);
        bw.newLine();//写一行分隔符,行分隔符字符串由系统属性line.separator定义,并不一定是单个换行符 \n
    }
} catch (IOException e) {
    e.printStackTrace();
}

 

(例)拷贝文件

try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C://fileRead.txt"));
     BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D://fileWrite.txt"))) {
    byte[] bytes = new byte[1024];
    int length;
    while ((length = bis.read(bytes)) != -1) {//边读边写
        bos.write(bytes, 0, length);//不调用write(byte b[]),防止写入多余数据
    }
} catch (IOException e) {
    e.printStackTrace();
}
posted @   半条咸鱼  阅读(35)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示