序列化
(1)概念:所谓对象序列化就是将对象的状态转化成字节流,保存在文件中,以后可以通过读取文件再生成相同状态的对象
(2)序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件或在网络上传输。反序列化就是打开字节流并重构对象。
(3)对象的序列化和反序列化:使用对象输出流输出序列化对象的步骤,有时也成为序列化;而使用对象输入流输入对象的过程,有时也称为反序列化。
(4)序列化的必要性:Java中一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端。这就需要有一种可以在两端传输数据的协议。Java序列化机制就是为了解决这个问题而产生的。
(5)Java对象序列化:只需要实现 java.io.Serializable 接口的类对象就可以转换成字节流或从字节流恢复。ObjectOutputStream 负责将对象写入字节流 ,ObjectInputStream 从字节流重构对象。
(6)serialVersionUID的作用:Java的序列化机制是通过判断类的 serialVersionUID 来验证版本的一致性。在进行反序列化时,JVM会把传来的字节流中的 serialVersionUID 与本地相应实体(类)的 serialVersionUID 进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。(InvalidCastException)。
/*
*写入对象部分代码块
*/
User user = new User("张三",18,3000.0);
......
//通过序列化写入对象
out.writeObject(user);
//通过反序列化读出对象(必须要进行强制类型转换,转成所需的原类型)
User temp = (User)in.readObject();
(7)Transient关键字的使用: transient说明一个属性是临时的,不会被序列化。
序列流
一个 SequenceInputStream代表其他输入流的逻辑连接。它从输入流的有序集合,从第一个直到文件结束达到读取,然后读取第二,等等,直到文件结束在包含输入流上达到。
主要方法: SequenceInputStream(InputStream s1, InputStream s2)
初始化新创建的 SequenceInputStream记住两个参数,将其写入的命令,第一 s1然后 s2,提供字节是从这 SequenceInputStream读。
具体实现操作进入我的博客查看音乐串烧的项目代码,里面有很详细的说明!