Java-处理流介绍&装饰模式分析

  • 处理流
    • 只用字节或是字符为单位来对数据做输入输出是不够的,有时候我们需要一行一行的读数据,有时我们需要读取特定格式的数据,因此Java提供了这样的机制,能把数据流作连接(chain),让原本没有特殊访问方法的流,通过连接到特殊的流后,变成可以用特定的方法来访问数据
  • “连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能

  • 处理流类的构造函数中,都必须接收另外一个流对象作为参数

  • 处理流类

种类\继承体系 字节 字符
缓冲(Buffered) BufferedInputStream, BufferedOutputStream BufferedReader, BufferedWriter
字符和字节转换 InputStreamReader,OutputStreamWriter
对象序列化 ObjectInputStream,ObjectOutputStream
特定数据类型访问 DataInputStream, DataOutputStream
计数 LineNumberInputStream
重复 PushbackInputStream
打印 PrintStream PrintWriter
  • 常见处理流类 — 缓冲流(Buffered)
    • 缓冲流对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法
    • Java提供了四种缓冲流,其构造方法
构造方法 含义
BufferedInputStream(InputStream in) 创建了一个带有32字节缓冲区的缓冲输入流
BufferedInputStream(InputStream in, int size) 创建了一个带有size大小缓冲区的缓冲输入流
BufferedOutputStream(OutputStream out) 创建了一个带有32字节缓冲区的缓冲输出流
BufferedOutputStream(OutputStream out,int size) 创建了一个带有size大小缓冲区的缓冲输出流
  • Java提供了四种缓冲流,其构造方法
构造方法 含义
BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流
BufferedReader(Reader in,int size) 创建一个使用size大小输入缓冲区的缓冲字符输入流
BufferedWriter(Writer out) 创建一个使用默认大小输入缓冲区的缓冲字符输出流
BufferedWriter(Writer out,int size) 创建一个使用size大小输入缓冲区的缓冲字符输出流
  • 常见处理流类 — 缓冲流(Buffered)

    • 缓冲流中的方法
      • BufferedInputStream支持其父类的mark和reset方法
      • BufferedWriter提供了readLine方法用于读取一行字符串(以\r或\n分隔)
      • BufferedWriter提供了newLine方法用于写入一个行分隔符
      • 对于BufferedOutputStream和BufferdWriter,写出的数据会先在内存中缓存,使用flush()方法将使内存中的数据立刻写出
  • 自动资源管理

    • 在JDK 7之前,我们需要使用一个finally块,来确保资源确实被释放掉,不管try块是完成了还是中断了。比如说读取文件或者输入流的时候,我们需要在finally块中关闭它们;而在Java 7里面,你可以使用try-with-resource的特性来自动关闭资源,只要是实现了AutoClosable和Closeable接口的都可以,几乎所有的资源类型都实现了Closeable接口,并重写了close()方法。JDK 7引入了try-with-resource语句,来确保每个资源在语句结束后都会调用AutoClosable接口的close()方法进行关闭。
try(BufferedReader reader = new BufferedReader(new FileReader("路径"));)  {  
    //...  
}  catch(Exception e)  {  
    e.printStackTrace();  
}

示例代码如下:

package 装饰模式;

public interface MyInputStream {

    public int read();
}
package 装饰模式;

public class MyFileInputStream implements MyInputStream {

    public MyFileInputStream() {
        
    }
    
    @Override
    public int read() {
        System.out.println("MyFileInputStream read()");
        return 0;
    }

}
package 装饰模式;

public class MyBufferedInputStream implements MyInputStream {

    private MyInputStream in;
    
    public MyBufferedInputStream(MyInputStream in) {
        this.in = in;
    }
    @Override
    public int read() {
        in.read();
        System.out.println("MyBufferedInputStream 开辟缓冲区read()");
        return 0;
    }
}
package 装饰模式;

public class Test {

    public static void main(String[] args) {
        new MyBufferedInputStream(new MyFileInputStream()).read();
    }
}

测试结果如下:

MyFileInputStream read()
MyBufferedInputStream 开辟缓冲区read()

以上就是我关于 Java-处理流介绍&装饰模式分析 知识点的整理与总结的全部内容,另附源码


分割线


博主为咯学编程:父母不同意学编程,现已断绝关系;恋人不同意学编程,现已分手;亲戚不同意学编程,现已断绝来往;老板不同意学编程,现已失业三十年。。。。。。如果此博文有帮到你欢迎打赏,金额不限。。。

你可能感兴趣的:(Java-处理流介绍&装饰模式分析)