序列化分析

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在对象大小发面没有区别,仅在于生成的描述信息不同

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Fastjson是一个高性能的Java JSON库,可以将JSON字符串与Java对象之间进行相互转换。在反序列化方面,Fastjson提供了多种方式来实现。 首先,最常见的方式是将JSON字符串直接反序列化Java对象。你可以使用`JSON.parseObject()`方法来实现这一操作。该方法接受两个参数:要解析的JSON字符串和目标Java类的Class对象。示例代码如下: ```java String jsonString = "{\"name\":\"John\",\"age\":30}"; User user = JSON.parseObject(jsonString, User.class); ``` 在上述代码中,我们将一个包含"name"和"age"属性的JSON字符串反序列化为一个名为User的Java对象。 除了直接反序列化外,Fastjson还支持将JSON字符串反序列化为泛型类型。你可以使用`TypeReference`类来指定具体的泛型类型。示例代码如下: ```java String jsonString = "[{\"name\":\"John\",\"age\":30},{\"name\":\"Jane\",\"age\":25}]"; List<User> userList = JSON.parseObject(jsonString, new TypeReference<List<User>>() {}); ``` 在上述代码中,我们将一个包含多个User对象的JSON数组反序列化为一个List<User>对象。 此外,Fastjson还支持将JSON字符串反序列化为JSONObject对象,该对象提供了一系列操作JSON数据的方法。你可以使用`JSON.parseObject()`方法,并传入`Feature.OrderedField`参数来实现。示例代码如下: ```java String jsonString = "{\"name\":\"John\",\"age\":30}"; JSONObject jsonObject = JSON.parseObject(jsonString, Feature.OrderedField); ``` 总的来说,Fastjson提供了灵活且高效的反序列化方式,可以满足各种不同的需求。以上只是一些常用的示例,你可以根据具体情况选择适合的方法来实现反序列化操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值