您的位置:首页 > 编程语言 > Java开发

如何计算java对象的大小

2016-10-09 17:21 387 查看
import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.util.HashMap;

import java.util.Map;

import net.blogjava.frankiegao123.util.ByteUtil;

public class HelloWorld {

    public static void main(String[] args) throws IOException {

        Map<String, String> map = new HashMap<String, String>();

        map.put("123", "abc");

        map.put("456", "def");

        

        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        ObjectOutputStream ooo = new ObjectOutputStream(baos);

        ooo.writeObject(map);

        byte[] bys = baos.toByteArray();

        // 长度需要减去 4 个字节:AC ED 00 05

        // AC ED -- 魔法数字

        // 00 05 -- 版本号

        System.out.println(bys.length - 4);

    }

}

 

 

或许不应该叫“魔法数字”,魔法数字是《重构》一书中的概念,与这里的不关,呵呵。

这里应该称为“魔数(magic number)”,魔数一般用于减少读取到垃圾数据的几率。像 Java 的 class 文件也有魔数,即 CA FE BA BE,类加载器加载字节码时,会先验证这 4 个字节,如果头 4 个字节不是这 4 个,那么下面也别做了,肯定不是个类文件,这样做的目的是可以加速错误的产生,不需要浪费无用功。

像很多网络传输协议中也带有魔数,比如规定报文中使用 A0 A0 A0 A0 作为魔数,当收到消息时先判断魔数是否正确,如果不正确,可以认为这是一段垃圾数据,不需要处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: