剖析使用 ObjectOutputStream 可能引起的内存泄漏
2010-05-10 00:00:00 来源:WEB开发网我们来看一下写入文件的内容:
清单 3. 写入文件内容
#sr #com.travelsky.test.MyObject €喳 +?^`# #L #str1t #Ljava/lang/String;L #str2q ~
#xpt #test1t #test2
我们可以看到写入的内容中包含了写入类的类型以及成员变量信息,当然关于插入的内容,我们可以覆盖 ObjectOutputStream 类的 writeStreamHeader() 方法来实现插入我们自定义的内容。当然如果这样做的话,就必须对 ObjectInputStream 类进行重写。
上面是一些题外话,下面回到正题,关于标题中提到的有内存泄漏的问题。为了更清晰直观的说明该问题,我又写了一个很简单的测试,代码如下:
清单 4. 多次写入
FileOutputStream fos = new FileOutputStream("c:\\test.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
MyObject myObj = new MyObject();
myObj.str1 = "test1";
myObj.str2 = "test2";
for (int i = 0; i < 5; i++) {
oos.writeObject(myObj);
}
fos.close();
我们再来看一下写入的内容:
清单 5. 写入 5 次
#sr #com.travelsky.test.MyObject €喳 +?^`# #L #str1t #Ljava/lang/String;L #str2q ~ #xpt
#test1t #test2q ~ #q ~ #q ~ #q ~ #q ~ #q ~ #q ~ #q ~ #q ~ #
我们可以看到多次写入同一个类型的对象,那么对象的类型信息是不会重复写入的。那么有人会说了,那是因为你写入的对象每次的内容都是一样的,接下来为了得到更清晰的测试结果,我们来让每次写入的内容不同。
Tags:剖析 使用 ObjectOutputStream
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接