如何计算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 作为魔数,当收到消息时先判断魔数是否正确,如果不正确,可以认为这是一段垃圾数据,不需要处理。
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 作为魔数,当收到消息时先判断魔数是否正确,如果不正确,可以认为这是一段垃圾数据,不需要处理。
相关文章推荐
- 如何准确计算Java对象的大小
- java如何计算对象的大小
- 如何准确计算Java对象的大小
- 如何计算java中的对象object大小size
- 【如何查看java对象所占的内存大小】
- JAVA对象所占字节大小计算方法
- JAVA内存使用--如何计算一个Java对象占用的字节数
- 如何计算java对象占用的内存
- java中计算对象内存大小
- 聊聊JVM(三)两种计算Java对象大小的方法
- 如何计算java对象占用的内存
- 如何计算java对象占用的内存
- 如何查看java对象所占的内存大小
- Java计算一个对象占用内存的大小
- java对象占用内存大小计算方式
- 【JAVA内存】如何计算一个Java对象占用的字节数
- 如何计算托管对象的大小
- 如何精确地测量java对象的大小-底层instrument API
- Java程序计算各种对象所占内存的大小的方法
- JAVA内存使用--如何计算一个Java对象占用的字节数