标签:接口 变量 hash 实例 理解 ash ext 需要 output
前言: 一直很不理解java的序列化的概念,为什么java对象的序列化要实现 Serializable的接口?或者要实现Externalizable的接口?而且Externalizable 的父类还是Serializable!并且Serializable接口中没有定义任何变量和方法!
而查找资料,资料中说 java JDK 中 java.io.ObjectOutputStream 与 java.io.ObjectInputStream 是 序列化API 那这里的序列化又是什么意思?查看 java API 中ObjectOutputStream 与 ObjectInputStream 的说明 并不能找到相关解释,源码 中也只在 他们的父类 FileInputStream 与 FileOutputStream 中找到了一些对文件的字节操作,那么到底什么是 java的序列化呢?!
概念:java序列化就是一种把对象转为字节序,并由字节序转为原对象的规则
首先在这里用更加通俗的话或者类似的概念来告诉大家,java的序列化 就是以特定的方式对 java对象进行 二进制层面的读写操作。而实现Serializable接口就是声明该对象遵循java的二进制操作规则。这种操作规则就是序列化本身。就像资料中所说java.io.ObjectOutputStream 与 java.io.ObjectInputStream 是 序列化API 他们(ObjectInputStream )对文本、图片、文件等进行序列化操作后(即 IO流) 由能解释 IO 流的 java对象 ObjectInputStream 进行反序列化操作,还原文件。
不罗嗦的解释 : Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。
实例: 在JDK 的类对象中HashMap<K,V> 实现了Serializable 接口 所以 我们可以 把 HashMap<K,V> 的类对象 序列化 与反序列化
注意: 实现序列化后最好显示指定 序列化版本号
private static final long serialVersionUID;
1) 在某些场合,希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID;
2) 在某些场合,不希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID。
标签:接口 变量 hash 实例 理解 ash ext 需要 output
原文地址:http://www.cnblogs.com/bigbigcoconut/p/6549845.html