JAVA中求解对象所占字节大小
来源:互联网 发布:网络语言打麻将 编辑:程序博客网 时间:2024/05/20 13:38
该类为cache4j缓存框架中的工具类方法,该方法实现了两个接口
接口1:计算对象在内存中所占字节数
接口2:复制对象,实现深度克隆效果,实现原理为先序列化对象,然后在反序列化对象;返回一个新的对象,达到克隆效果
package net.sf.cache4j.impl;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInput;import java.io.ObjectInputStream;import java.io.ObjectOutput;import java.io.ObjectOutputStream;/** * * @version $Revision: 1.0 $ $Date:$ * @author Yuriy Stepovoy. <ahref="mailto:stepovoy@gmail.com">stepovoy@gmail.com</a> **/public class Utils { /** * 计算一个对象所占字节数 * @param o对象,该对象必须继承Serializable接口即可序列化 * @return * @throws IOException */ public static int size(final Object o) throws IOException { if (o == null) { return 0; } ByteArrayOutputStream buf = new ByteArrayOutputStream(4096); ObjectOutputStream out = new ObjectOutputStream(buf); out.writeObject(o); out.flush(); buf.close(); return buf.size(); } /** * 赋值对象,返回对象的引用,如果参数o为符合对象,则内部每一个对象必须可序列化 * @param o对象,该对象必须继承Serializable接口即可序列化 * @return * @throws IOException * @throws ClassNotFoundException */ public static Object copy(final Object o) throws IOException, ClassNotFoundException { if (o == null) { return null; } ByteArrayOutputStream outbuf = new ByteArrayOutputStream(4096); ObjectOutput out = new ObjectOutputStream(outbuf); out.writeObject(o); out.flush(); outbuf.close(); ByteArrayInputStream inbuf = new ByteArrayInputStream(outbuf.toByteArray()); ObjectInput in = new ObjectInputStream(inbuf); return in.readObject(); }}
例如:对象SMatrix
首先在定义类SMatrix时,必须为
public class SMatrix implements Serializable{//***}
一定要注意的一个问题是:所计算的对象必须要实现implements Serializable
0 0
- JAVA中求解对象所占字节大小
- JAVA对象所占字节大小计算方法
- Java中变量所占字节大小及有效取值范围
- C++主要数据类型在计算机中所占字节大小
- C语言中指针变量所占字节大小
- 结构体在内存中所占字节大小计算
- 结构体在内存中所占字节大小计算
- C++主要数据类型在计算机中所占字节大小
- c语言中各类型所占字节大小
- C++常见类型所占字节大小
- C++ 数据类型所占字节大小
- 指针变量所占字节大小问题
- C++string所占字节大小
- C++中类对象所占空间的大小
- C++中类对象所占空间的大小
- C++中类对象所占空间的大小
- C++中类对象所占空间的大小
- C++中类对象所占空间的大小
- 设计模式读书笔记:Mediator(中介者)
- LeetCode225:Implement Stack using Queues
- 多个文本文件两两碰撞相同内容
- 数据类型和运算符(三)
- 移动开发者们,是时候使用HTML5了!
- JAVA中求解对象所占字节大小
- 继承(代码体现)
- php mysql_fetch_array与mysql_fetch_assoc区别
- 质数筛选方法(埃拉托斯特尼筛法)
- [Solved] MATLAB Linux install error: /tmp/mathworks_15227/java/jre/glnxa64/jre/bin/java: Permission
- Leetcode#29 Divide Two Integers
- 简单语法
- 在OS X中使用Homebrew
- 黑马程序员——高新技术---Java基础语法—面向对象_构造方法,static 关键字