内存===>硬盘:输出Out(写数据)
硬盘===>内存:输入In(读数据)
OutputStream:
1.操作的数据都是字节
2.定义了输出字节流的基本共性功能
3.输出流的方法都是write方法,可以操作字节数组,也可以操作单个字节
InputStream:
1.操作的数据都是字节
2.定义了输入字节流的基本共性功能
3.输入流中的方法都是read方法
read():读取一个字节并且返回,如果没有字节可以读了就返回-1
BufferedInputStream:缓冲字节输入流
BufferedOutputStream:缓冲字节输出流
Reader:读取
1.InputStreamReader
2.FileReader
Writer:写入
1.OutputStreamWriter
2.FileWriter
BufferedReader:缓冲字符输入流
BufferedWriter:缓冲字符输出流
小结:
InputStreamReader和OutputStreamWriter是字符和字节的桥梁,字符转换流
原理:字节流+编码表
FileReader和FileWriter:作为子类仅作为操作字符文件的便捷类,也就是说当操作字符文件的时候,使用的是默认的编码表时,可以直接用,不需要用父类。
键盘录入:BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
注意:一旦指定其他编码表的时候,绝对不能够用子类,必须要用字符转换流
什么时候用子类呢:
1.操作的是文件
2.使用的是默认编码
一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化
2.什么是序列化?
将对象的状态信息转换为可以存储或传输的形式的过程,在序列化期间,对象将其当前状态写入到临时存储区或持久性存储区,之后,便可以通过从存储区中读取或反序列化对象的状态信息,来重新创建该对象(反序列化)
3.什么情况下需要序列化?
当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化
4.transient 关键字作用
主要用来忽略我们不希望进行序列化的变量
5.序列化版本号
serialVersionUID,取值是 Java 运行时环境根据类的内部细节自动生成的。如果对类的源代码作了修改,再重新编译,新生成的类文件的 serialVersionUID 的取值有可能也会发生变化。序列化和反序列化就是通过对比其 SerialversionUID 来进行的,我们修改一个实现 Serializable 接口的实体类,重新编译后,显然程序会重新会生成新值,那么一旦SerialversionUID 跟之前不匹配,反序列化就无法成功。在实际的生产环境中,我们可能会建一系列的中间 Object 来反序列化我们的 pojo,为了解决这个问题,我们就需要在实体类中自定义 SerialversionUID,定义了之后不管我们序列化之后如何更改我们的 实体(不删除原有字段),最终都可以反序列化成功。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。