public class testSerial implements Serializable {
private static final long serialVersionUID = -7392224114251372902L;//或1L
private 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;//或1L
private 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在对象大小发面没有区别,仅在于生成的描述信息不同
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个字节
如果序列化一个 含有40个字节的字符对象的话,却只有47字节,描述性信息仅仅7字节
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("序列化一个字符串对象.txt"));
oos.writeObject("1abc1abc1abc1abc1abc1abc1abc1abc1abc1abc");
oos.flush();
oos.close();
可以得出结论:序列化过程对象类型信息越多,描述性信息越大,如果是同一对象,则描述性信息仅仅占一位(同一对象下),应该只是用作标记的
这样也太片面,可以试一下int类型等,不过大致的思路应该一样!!
最终结论:
如果能使用简单数据类型 如,字符串,则尽量使用简单数据类型,对象越大,描述性信息越多,传输过程产生的信息越多,不利于高负载下的io吞吐!!!