博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
序列化分析
阅读量:6689 次
发布时间:2019-06-25

本文共 3125 字,大约阅读时间需要 10 分钟。

public class testSerial implements Serializable {

private static final long serialVersionUID = -7392224114251372902L;//或1Lprivate int aaa;private String bbb;public int getAaa() {    return aaa;}public void setAaa(int aaa) {    this.aaa = aaa;}public String getBbb() {    return bbb;}public void setBbb(String bbb) {    this.bbb = bbb;}

}

public class testBSerial implements Serializable {

private static final long serialVersionUID = -2383816885962918245L;//或1Lprivate int aaa;private String bbb;public int getAaa() {    return aaa;}public void setAaa(int aaa) {    this.aaa = aaa;}public String getBbb() {    return bbb;}public void setBbb(String bbb) {    this.bbb = bbb;}

}

public static void main(String[] args) throws IOException{
testBSerial a = new testBSerial();
a.setAaa(1);
a.setBbb("abc");

testSerial aa = new testSerial();    aa.setBbb("abc");    aa.setAaa(1);    testBSerial b = new testBSerial();    b.setAaa(1);    b.setBbb("abc");    testSerial bb = new testSerial();    bb.setBbb("abc");    bb.setAaa(1);    testBSerial c = new testBSerial();    c.setAaa(1);    c.setBbb("abc");    testSerial cc = new testSerial();    cc.setBbb("abc");    cc.setAaa(1);    testBSerial d = new testBSerial();    d.setAaa(1);    d.setBbb("abc");    testSerial dd = new testSerial();    dd.setBbb("abc");    dd.setAaa(1);    testBSerial e = new testBSerial();    e.setAaa(1);    e.setBbb("abc");    testSerial ee = new testSerial();    ee.setBbb("abc");    ee.setAaa(1);    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("序列化十个不同serialVersionUID的对象.txt"));    oos.writeObject(a);    oos.writeObject(aa);    oos.writeObject(b);    oos.writeObject(bb);    oos.writeObject(c);    oos.writeObject(cc);    oos.writeObject(d);    oos.writeObject(dd);    oos.writeObject(e);    oos.writeObject(ee);    oos.flush();    oos.close();}

}

此处做了序列化中1L跟自动生成的serialVersionUID做了比较
各创建了5个对象,最终发现打印出来的字节数均为268字节,所以默认1L跟自动生成的serialVersionUID在对象大小发面没有区别,仅在于生成的描述信息不同

602579-20161204161325584-1858596405.png

602579-20161204161512006-1343366873.png

Java的基本数据类型

float 4 字节 32位IEEE 754单精度
double 8 字节 64位IEEE 754双精度
byte 1字节 -128到127
short 2 字节 -32,768到32,767
int 4 字节 -2,147,483,648到2,147,483,647
long 8 字节 -9,223,372,036,854,775,808到9,223,372,036, 854,775,807
char 2 字节 整个Unicode字符集
boolean 1 位 True或者false

但是如果仅仅去序列化十个字符串(这里一个字母占一个字节)的对象

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("序列化十个字符串对象.txt"));
oos.writeObject("1abc");
oos.writeObject("1abc");
oos.writeObject("1abc");
oos.writeObject("1abc");
oos.writeObject("1abc");
oos.writeObject("1abc");
oos.writeObject("1abc");
oos.writeObject("1abc");
oos.writeObject("1abc");
oos.writeObject("1abc");
oos.flush();
oos.close();
这样序列化之后的内容仅仅占用56字节
也就是说总共10个字符串对象,40个字节,序列化的描述信息仅仅16个字节
602579-20161204162547459-1736526853.png

如果序列化一个 含有40个字节的字符对象的话,却只有47字节,描述性信息仅仅7字节

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("序列化一个字符串对象.txt"));
oos.writeObject("1abc1abc1abc1abc1abc1abc1abc1abc1abc1abc");
oos.flush();
oos.close();

可以得出结论:序列化过程对象类型信息越多,描述性信息越大,如果是同一对象,则描述性信息仅仅占一位(同一对象下),应该只是用作标记的

这样也太片面,可以试一下int类型等,不过大致的思路应该一样!!

最终结论:

如果能使用简单数据类型 如,字符串,则尽量使用简单数据类型,对象越大,描述性信息越多,传输过程产生的信息越多,不利于高负载下的io吞吐!!!

转载于:https://www.cnblogs.com/kevinfuture/p/6131056.html

你可能感兴趣的文章
IOS --React Native
查看>>
Linux CPU
查看>>
用模板实现顺序表与单链表
查看>>
c++中重载,重写,重定义的区别
查看>>
nagios监控
查看>>
Linux/Centos ntp时间同步,联网情况和无网情况配置
查看>>
初级网络运维工程师比赛题目
查看>>
跨交换机实现vlan实验报告
查看>>
如何在Rancher Catalog中使用VMware Harbor
查看>>
13.C#--求1-100之间所有整数的和
查看>>
40.C#--面对对象,类的继承和构造函数继承的使用
查看>>
列表,元组,集合
查看>>
jquery easyui滚动条部分设置介绍
查看>>
cannot find -lxxx问题
查看>>
预防云端开源项目打包 Redis Labs再更改模块
查看>>
超惊人!去年发生的身分外泄安全事件是2017的4倍
查看>>
oracle sqlplus免安装的配置instantclient-basiclite
查看>>
Java开发GUI之选择列表
查看>>
一、分布式商城架构逻辑图
查看>>
find命令详解
查看>>