zoukankan      html  css  js  c++  java
  • 序列化分析

    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吞吐!!!

  • 相关阅读:
    前端优化,注意的一些东西
    php遍历memcache的方法
    mysql增量备份
    CI框架安装
    sphinx:received zerosized searchd response
    SEO思考:逆水行舟 不进则退
    利用GNUstep在windows下编写objectc
    Centos5.3下安装memcached
    想卖网站?我来给你指条明路
    时髦的互联网公司都在用什么技术?
  • 原文地址:https://www.cnblogs.com/kevinfuture/p/6131056.html
Copyright © 2011-2022 走看看