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

  • 相关阅读:
    【TS】535- 7个超好用的 TypeScript 新功能
    【学习】一起加入重学 TypeScript 学习小组
    17.5W秒级交易峰值下的混合云弹性架构之路
    微服务架构:spring cloud之服务注册和服务发现
    消息队列服务RabbitMQ 和Kafka对比
    微服务架构:spring cloud简介
    2016 年度码云热门项目排行榜 TOP 10
    Netflix Conductor : 一个微服务的编排器
    Java 9的这一基本功能,你可能从未听过
    使用 Docker 搭建 Java Web 运行环境
  • 原文地址:https://www.cnblogs.com/wenbaoli/p/5655744.html
Copyright © 2011-2022 走看看