java成员对象 内存_输出JavaBean对象在内存中的大小

本文介绍了如何使用Object流进行Java对象的序列化,以计算和理解JavaBean对象在内存中的大小。通过创建一个实现了Serializable接口的类T,展示了如何将对象写入文件并读取,从而间接得知对象的大小。在对象内容改变时,文件大小随之变化,但具体每个成员变量占用的空间则依赖于Java虚拟机的实现。
摘要由CSDN通过智能技术生成

Object流

直接将Object写入或读出

也叫做对象的序列化:把一个Object直接转换成字节流写到硬盘上,或者直接写到网络上去

这里有一个类T:

class T implements Serializable { //

注意,必须要实现Serializable接口,才是可序列化的

int i =

10;

int j =

9;

double d =

2.3;

int k =

15;

}

这个类里面的成员变量3个int,1个double,int是4字节,double是8字节

所以对象的大小绝对不会小于20字节,但是T肯定是从Object类继承,那么继承下来这些内容也

占空间,比如方法什么的,所以肯定要大于20字节了

运行下面这个类:

public class Test {

public

static void main(String[] args) {

T t = new T();

try {

FileOutputStream fos = new

FileOutputStream("d:/abc.txt");

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(t);

oos.flush();

oos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

直接将T对象通过Object流写到了D盘的名为abc.txt的文件里面

一个空文本文件是0字节,找到这个文件以后查看它的属性,我这里是67

字节,

那么这个对象就是67 字节

现在在T类中添加一些其他内容,那么再次输出,字节数肯定就比原来大了,它就是把整个对象转换成

字节,写入了文件,这个应该算是比较好的方式了,但是我们无法特别精确的知道对象中哪些内容各自

占用多少空间,因为那是Java虚拟机的事了

当然,把一个对象写进去,也可以读出来:

FileInputStream fis = new

FileInputStream("");

ObjectInputStream ois = new ObjectInputStream(fis);

// 当成Object读出来的,强转成T类型

T tReaded = (T)ois.readObject();

System.out.println(tReaded.i + "

" + tReaded.j + "

" + tReaded.d + "

" + tReaded.k);

发现打印出的成员变量的值,还是存进去这个对象的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值