java中对象字节数_JAVA中求解对象所占字节大小
該類為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. stepovoy@gmail.com
**/
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
總結
以上是生活随笔為你收集整理的java中对象字节数_JAVA中求解对象所占字节大小的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猎聘APP如何登录企业账号
- 下一篇: java时间日期格式器_JAVA基础类库