JAVA序列化技术-----二进制数据详细介绍
来源:互联网 发布:话费源码 编辑:程序博客网 时间:2024/06/01 10:53
待序列化的对象有一个值是1000的属性num
package serializable.test;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class SerializableTestimplements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public int num = 1000;
public static void main(String[]args) {
try {
//输出序列化对象到本地文件
FileOutputStream fos = new FileOutputStream("d:/data.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
SerializableTest serializableTest = new SerializableTest();
oos.writeObject(serializableTest);
oos.flush();
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
序列化二进制字节数据如图
第一部分 序列化文件头
AC ED-------声明使用了序列化协议 STREAM_MAGIC
00 05--------声明序列化协议版本 STREAM_VERSION
73 -----------声明这是一个新的对象 TC_OBJECT
第二部分
72 ---------- 声明这里开始一个新class TC_CLASSDESC
00 22--------声明class名字的长度 10进制的34
73到74------这部分声明了SerializableTest的完整类名
00 00 00 00 00 00 00 01是一个serialVersionUID,上面值为1L 这里都是16进制表示的
如果没有则由算法随机生成
02 ----------标记号,声明该对象是支持序列化的
00 01 -------声明该类所包含的域的个数是1
第三部分
对各个属性项的描述
49 ----------域类型 49代表I,Int类型49十进制=73=ASCII的字幕I -->i的大写
00 03-----------域名字的长度
6E 75 6D -----num属性的名称
第四部分
输出该对象有无父类信息描述
如果有,数据格式和第二部分一样,
78 ---------- 对象块结束的标志 TC_ENDBLOCKDATA
70 ---------- 说明没有其他超类 TC_NULL
第五部分
00 00 03 E8 -----10进制 1000的数值
检验
public int num = 5000;
运行得到序列化数据
显示只有最后几位代表的属性的值的位数会改变,其他不变
删除serialVersionUID
仅仅serialVersionUID改变,由随机数组成
修改serialVersionUID
private static final long serialVersionUID = 888888888888L;
000000CEF5E80E38H=888888888888L
修该属性名为 public int count = 5000;
属性长度已经变为00 05,代表属性名的长度
63 6F 75是属性长度,count
70 78不变, 00 00 13 88 =5000不变
修改类型省略
总结:
1、当父类继承Serializable接口时,所有子类都可以被序列化
2、子类实现了该接口,父类没有,父类的属性不能序列化(不报错,数据会丢失),但是子类可以正常序列化
3、如果序列化的属性是对象,则这个对象也必须实现该接口,否则会报错
4、在反序列化的时候,如果对象的属性有修改或删减,则修改或删减的部分属性会丢失。但不会报错
5、在反序列化时,如果serialVersionUID被修改,则反序列化时会失败
6、这种序列化是java的序列化手段,很难用其他语言还原,如果考虑到其他语言使用通用数据结构JSON/XML,RMI就是使用这种序列化
参考《深入分析javaweb技术内幕》
- JAVA序列化技术-----二进制数据详细介绍
- JAVA序列化技术
- Java 序列化技术
- Java序列化技术
- Java序列化技术
- java序列化介绍
- 详细介绍java的反射技术
- 教你使用Java,C#使用二进制序列化、反序列化操作数据
- java序列化详细解释
- C++二进制的详细介绍
- java对象序列化技术
- JAVA序列化技术概述
- Java序列化技术浅谈
- 基于游戏消息数据的二进制序列化实现
- 关于数据序列化(2)二进制流示例
- SaaS技术详细介绍
- HBase技术详细介绍
- Serializable java序列化介绍
- 使用scipy.optimize进行目标函数中的矩阵参数优化
- linux配置jdk环境变量
- zookeeper注册服务信息---注册服务信息/获取服务信息(nodejs typescrip)
- Openjudge-【4977】怪盗基德的滑翔翼
- 查看LINUX进程内存占用情况
- JAVA序列化技术-----二进制数据详细介绍
- java连接zookeeper集群报错
- 解决html中刷新页面后checkbox还选中的问题
- ab压力测试
- JS代码优化
- 技术文章 | 比人工还准确!看深度学习如何对源码进行分类
- 史上最盛大的黑科技年会前夕,阿里妹做了一个重大决定
- spring mvc(注解)上传文件的简单例子(超级好)
- 换行替代