版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huoguang_/article/details/90342640
Java本身不包含I/O流,而是通过Java API提供的java.io包完成I/O。
为了读取或输出数据,Java程序与数据发送者或接收者之间要建立一个数据通道,这个数据通道被抽象成为---流。
按照流操作的数据单元划分,流可分为字节流和字符流。
- 字节流:以字节为基本单元进行数据I/O,可用于二进制数据的读写
- 字符流:以字符为基本单元进行数据I/O,可用于文本数据的读写
常用的I/O流类
(1)文件流:
FileInputStream类/FileOutputStream类(常用于读写二进制,如图片)
FileRead类/FileWriter类(常用于读写文本文件)
(2)数据流:
DataInputStream类/DataOutputStream类
(3)缓存流:
(4)InputStreamReader/OutputStreamWriter
(5)PrintStream/PrintWriter
(6)标准输入/输出:System.in/System.out
对象序列化
对象序列化是指将对象写入字节流以实现对象的持久性,在需要时又可以从字节流中恢复该对象的过程(反序列化)。
对象序列化的主要任务是将对象的状态信息以二进制流的形式输出。
Serializable是一个空接口,他的目的只是标识一个类的对象可以被序列化。如果一个类是可序列化的,则它的子类也是可序列化的。
可序列化类中的属性serialVersionUID用于标识类的序列化版本,如果不显式定义该属性,JVM会根据类的相关信息计算它的值,而类修改后的计算结果与类修改前的计算结果往往不同,这样反序列化就会因类版本不兼容而失败。
一个类如果自身实现了Serializable接口,即使其父类没有实现Serizlizable接口,它的对象仍然可以被序列化。
文章来源: https://blog.csdn.net/huoguang_/article/details/90342640