该类为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中求解对象所占字节大小相关推荐

  1. java char字节数_Java中char到底是多少字节?

    展开全部 java中的char占62616964757a686964616fe58685e5aeb9313333376234342个字节 1:"字节"是byte,"位&q ...

  2. java类的无参构造函数_java中所有类都默认有一个无参构造函数吗?

    当没有定义构造方法时每个类里都有一个默认的无参的构造方法,此时该类就只有一个构造方法:而当你显示定义类的构造方法时,那就没有那个默认的构造方法了,该类所以的构造方法就是定义了的那些构造方法. 构造方法 ...

  3. java怎么判断类相同_java中如何判定两个对象属于同一类 两个对象是不是类的相同实例,即用“===”是什么意思...

    导航:网站首页 > java中如何判定两个对象属于同一类 两个对象是不是类的相同实例,即用"==="是什么意思 java中如何判定两个对象属于同一类 两个对象是不是类的相同实 ...

  4. java中对象的生存期_Java中对象的生存周期

    文章目录 JAVA对象的生存周期 1.创建阶段(Created) 为对象分配内存需要考虑的问题 2.应用阶段(In Use) 3.不可见阶段(Invisible) 4.不可达阶段(Unreachabl ...

  5. java中对象别名使用_JAVA中的别名现象

    问题的提出: 在java中,对基本数据类型的赋值时,是将数据从一个地方复制到另外一个地方,当a=b时,将b的内容复制给a,若修改a时,b并不会受到这种修改的影响. 在对对象进行赋值时,当我们对一个对象 ...

  6. java修改list中对象的值_Java中List集合的一点总结

    为什么要用接口引用指向实现类的对象? 这种写法其实java多态的表现形式 多态的定义: 指允许不同类的对象对同一消息做出响应. 即同一消息可以根据发送对象的不同而采用多种不同的行为方式. (发送消息就 ...

  7. java 数组对象属性数组_Java中数组的特性

    数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具有固定的长度,并且在内存中占据连续的空间.在C,C++等语言中,数组的定义简洁清晰,而在java中确有一些会让人迷惑的特性. ...

  8. java 对象逃逸 解决_Java中的逃逸问题心得

    大家一般认为new出来的对象都是被分配在堆上,但这并不是完全正确,通过对Java对象分配过程分析,我们发现对象除了可以被分配在堆上,还可以在栈或TLAB中分配空间.而栈上分配对象的技术基础是逃逸分析和 ...

  9. java input是关键字吗_Java中对象的串行化(Serialization)和transient关键字 - 金色阳光...

    Java中对象的串行化(Serialization)和transient关键字: 对象的串行化(Serialization) 一.串行化的概念和目的 1.什么是串行化 对象的寿命通常随着生成该对象的程 ...

最新文章

  1. flash中物体运动基础之三---------摩擦力,重力,风力,推力,旋转
  2. 给大忙人看的Java核心技术笔记(8、Stream)
  3. 全球及中国梦幻体育软件和平台行业十四五规模展望及应用价值分析报告2021-2027年
  4. sun java ide,1.6 JAVA IDE安装
  5. Hive _函数(系统内置函数、自定义函数、自定义UDF函数)
  6. Sbo通用数据选择功能的实现
  7. 【AT987】高橋君【组合数】【莫队】
  8. 服务器ssr进程启动怎么运行,要SSR? NUXT项目从初始化到部署服务器流程全记录
  9. hive获取mysql里的文件_apache – 如何在hive中获取数据库用户名和密码
  10. DeBruijin DFS
  11. 原来更新A的一列为B列的一列,这样简单呀
  12. hive if函数_数据仓库,Hive中使用 != 或 lt;gt;; 符号进行条件过滤时的坑
  13. 一步一步学Repast 第二章(把界面显示出来)
  14. SQL Server修改表结构,不允许保存更改解决方案
  15. autojs控制台美化
  16. 计算机专业电路基础高考试卷,计算机专业电路基础试题(4页)-原创力文档
  17. SqLite3基本操作
  18. 基于等级保护2.0标准体系的医院信息化安全建设与研究
  19. 普加甘特图,项目管理解决方案。
  20. Google是如何做Code Review的

热门文章

  1. 在JUnit测试中使用Builder模式
  2. Java 7:使用NIO.2进行文件过滤-第1部分
  3. 使用Hadoop计算共现矩阵
  4. Java最佳实践– Vector vs ArrayList vs HashSet
  5. Xuggler教程:帧捕获和视频创建
  6. MySQL函数/数据库函数
  7. xxx钻石商城功能开发需求
  8. android获取应用安装通知消息,如何在Android 11 上获取已安装应用列表
  9. 单片机设计时钟程序c语言,单片机电子时钟程序设计
  10. html怎么上传qq空间,qq空间怎么上传照片