首页 > 编程语言 >Java I/O流(四)I/O流原理和分类 [节点流,处理流]

Java I/O流(四)I/O流原理和分类 [节点流,处理流]

时间:2022-09-23 11:24:27浏览次数:58  
标签:Java 处理 对象 缓冲 分类 实现 序列化 节点

节点流可以从一个特定的数据源读写数据,如FileReader,FileWriter等等

处理流(也叫包装流)是“连接”在已存在的流(节点流或处理流)之上,为程序提供更强大的读写功能,如BufferedReader,BufferedWriter等等

== 节点流和处理流的区别和联系

1.节点流是底层流/低级流,直接跟数据源相接

2.处理流包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出

3.处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连

==处理流的功能主要体现在以下两个方面

1.性能的提高:主要以增加缓冲的方式来提高输入输出的效率

2.操作的便捷:处理流可能提供了一系列的方法来一次输入输出大批量的数据,使用更加灵活方便

 

BufferedReader:字符缓冲输入流

使用BufferedReader读取文本文件,并显示在控制台

 

 BufferedWriter:字符缓冲输出流

使用BufferedWrite将“你好,I/O流”,写入文件中  

 前面的输入输出流有提到追加和覆盖的概念,这里如果要实现追加,我们可以看到只能在节点流的构造器中实现。

在缓冲流中没有提供这样的构造,所以在节点流中实现

 

接下来通过这两个缓冲流实现文件的拷贝

 

BufferedInputStream:字节缓冲输入流

BufferedOutputStream:字节缓冲输出流

这里不再分开写两种缓冲流的例子,直接实现一个图片的拷贝举例。

 

 

 

对象流:

我们来看几个需求,便于理解对象流:

  1.将 int num = 100这个 int 数据保存到文件中,注意不是数字100,而是 int 100 ,既保存类型,也保存值,并且还能够从文件中直接恢复 int 100

  2.将 Dog dog = new Dog ("小韩" , 4) 这个dog对象保存到文件中,并且能够从文件恢复。

  3.可以看到上面两个要求,就是能够将基本数据类型或者对象进行序列化和反序列化操作

序列化和反序列化:

  1.序列化就是在保存数据时,保存数据的值和数据类型

  2.反序列化就是在恢复数据时,恢复数据的值和数据类型

  3.需要让某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,该类必须实现如下两个接口之一:

    1.Serializable :这是一个标记接口,没有任何方法

    2.Externalizable:该接口有方法需要实现,因此一般用上面的接口

 

ObjectOutputStream:字节对象输出流 (提供序列化功能)

 案例:使用ObjectOutputStream序列化基本数据类型和一个Dog对象(name,age),并保存到data.dat文件中 

 

ObjectInputStream:字节对象输入流 (提供反序列化功能)

案例:使用ObjectInputStream 将上面的data.dat读取,并反序列化恢复数据

 

节点流处理流注意事项和细节说明:

1.读写顺序要一致

2.要求实现序列化或反序列化对象,需要实现Serializable

3.序列化的类中建议添加SerailVersionUID为了提高版本得的兼容性

4.序列化对象时,默认将里面所有属性都进行序列化,但除了static或transient修饰的成员

5.序列化对象时,要求里面属性的类型也需要实现序列化接口

6.序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也默认实现了序列化

标签:Java,处理,对象,缓冲,分类,实现,序列化,节点
From: https://www.cnblogs.com/zhulei118/p/16643278.html

相关文章