WEB开发网
开发学院软件开发Java 剖析使用 ObjectOutputStream 可能引起的内存泄漏... 阅读

剖析使用 ObjectOutputStream 可能引起的内存泄漏

 2010-05-10 00:00:00 来源:WEB开发网   
核心提示: 我们来看一下写入文件的内容:清单 3. 写入文件内容#sr#com.travelsky.test.MyObject€喳+?^`##L#str1t#Ljava/lang/String;L#str2q~#xpt#test1t#test2我们可以看到写入的内容中包含了写入类的类型以及成员变量

我们来看一下写入文件的内容:

清单 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 ~ # 

我们可以看到多次写入同一个类型的对象,那么对象的类型信息是不会重复写入的。那么有人会说了,那是因为你写入的对象每次的内容都是一样的,接下来为了得到更清晰的测试结果,我们来让每次写入的内容不同。

上一页  1 2 3 4  下一页

Tags:剖析 使用 ObjectOutputStream

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接