序列化和反序列化
1.序列化就是在保存数据时, 保存数据的值和数据类型
2.反序列化就是在恢复数据时, 恢复数据的值和数据类型
3.需要让某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,该
类必须实现如下两个接口之一:
Serializable //这是一个标记接口,没有方法
Externalizable //该接口有方法需要实现,因此我们一般实现上面的Serializable接口
IO流的三种分类
第一种:输入流和输出流
按照流的流向来分,可以分为输入流和输出流。输入,输出都是从程序运行所在内存的角度来划分的。
输入流:只能从中读取数据,而不能向其写入数据,由InputStream和Reader作为基类。
输出流:只能向其写入数据,而不能从中读取数据。由OutputStream和Writer作为基类
第二种:字节流和字符流
字节流和字符流的用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同。
字节流操作的数据单元是8位字节,由InputStream和OutputStream作为基类。
字符流操作的数据单元是16位的字符,由Reader和Writer作为基类
第三种:节点流和处理流
按照流的角色来分,可以分为节点流和处理流。
节点流:可以从向一个特定的IO设备(如磁盘、网络)读/写数据的流。也被称为低级流。
处理流:用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写功能。也称为高级流
节点流和处理流的区别和联系
1.节点流是底层流/低级流,直接跟数据源相接。
2.处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。
3.处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连[模拟修饰器设计模式]
处理流的功能主要体现在以下两个方面:
1.性能的提高:主要以增加缓冲的方式来提高输入输出的效率。
2.操作的便捷:处理流可能提供了- -系列便捷的方法来一次输入输出大批量的数据,使用更加灵活方便
常见的处理流BufferedReader和BufferedWriter
在关闭处理流时,只关闭外层流即可
字节流通常用来处理二进制文件,视频,音频,图片
1、inputStream
注意先进行ObjectOutputStream 序列化到 D:\a.dat 文件中 然后才进行的反序列化
可以看到输出:
2、OutputStream
通常用来处理文本文件,更高效。
1、Reader
BufferedReader类中,有属性Reader,即可以封装一个节点流,该节点流可以是任意的,只要是Reader子类 (BufferedWriter也是一样的操作)
2、Writer
注意:FileWriter使用后,必须要关闭(close)或刷新(flush)流, 否则写入不到指定的文件!
load:加载配置文件的键值对到Properties对象
list:将数据显示到指定设备
getProperty(key):根据键获取值
setProperty(key,value):设置键值对到Properties对象
store:将Properties中的键值对存储到配置文件,在idea中,保存信息到配置文件,如果
含有中文,会存储为unicode码
1、Properties读取数据
2、Properties写入数据
1、字节流copy练习
2、缓冲字符流copy文本练习
BufferedReader和BufferedWriter 是按照字符操作的,不要去操作二进制文件(声音、视频、doc、pdf、图片等等),拷贝后的文件可能会造成文件损坏
3、缓冲字节流copy二进制文件(copy文本文件一样可以)
Original: https://www.cnblogs.com/yclblogs/p/15851496.html
Author: 阿龙同学
Title: io流复习+代码演示
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588933/
转载文章受原作者版权保护。转载请注明原作者出处!