zoukankan      html  css  js  c++  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. <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

  • 相关阅读:
    我们是怎么管理QQ群的
    2014年10月【下】-前端开发半月刊
    我们一般的前端开发流程
    没有素描色彩基础适合学习UI吗,如果可以,该怎么学?
    豪情-关于生活工作学习之感悟-第一篇
    网页插件学javascript还是jquery好啊?
    我们平时是怎么写html和css的?
    2014年10月【上】-前端开发半月刊
    2014年9月-前端开发月刊
    固定滚动菜单
  • 原文地址:https://www.cnblogs.com/wenbaoli/p/5655744.html
Copyright © 2011-2022 走看看