IO中的包装流--Buffered

63 阅读1分钟

概述

简要说一下节点流和包装流的区别,节点流这个主要是针对具体的数据类型,比如说File类型、数组类型(ByteArrayInputStream)、管道类型(PipedInputStream),就是都是针对具体的数据类型有的具体的节点流

  • FileInputStream
  • ByteArrayInputStream
  • PipedInputStream

包装流,其实就是完成了一个扩展,一个功能的扩展而已。看以下BufferedInputStream源码

protected FilterInputStream(InputStream in) {
    this.in = in;
}
public BufferedReader(Reader in, int sz) {
    super(in);
    if (sz <= 0)
        throw new IllegalArgumentException("Buffer size <= 0");
    this.in = in;
    cb = new char[sz];
    nextChar = nChars = 0;
}

没有什么很神秘的东西,就是利用InputStream类型的参数接收传进来了节点流,然后扩展了一些更加高级的方法,这其实也是一种设计模式--修饰器模式。

用法

直接贴代码吧!主要感觉用法跟节点流都一样,没什么很大的区别。这个BufferedWriter有了一个readLine()方法。感觉其他的没什么不一样的。

BufferedReader bufferedReader = new BufferedReader(new FileReader(sourceFilePath));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(targetFilePath));
String line;
while ((line = bufferedReader.readLine()) != null) {
    bufferedWriter.write(line);
    bufferedWriter.newLine();
}

bufferedWriter.close();
bufferedReader.close();