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

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

 2010-05-10 00:00:00 来源:WEB开发网   
核心提示:使用 ObjectOutputStream 来进行对象序列化相信大多数程序员在使用 Java 进行日常开发工作中,都曾经遇到需要把数据进行序列化的情况,剖析使用 ObjectOutputStream 可能引起的内存泄漏,比如写入文件或者写入 socket 流,Java 的类库也提供了丰富工具类供我们使用,通过上面的说明

使用 ObjectOutputStream 来进行对象序列化

相信大多数程序员在使用 Java 进行日常开发工作中,都曾经遇到需要把数据进行序列化的情况,比如写入文件或者写入 socket 流。Java 的类库也提供了丰富工具类供我们使用,这其中就包括 ObjectOutputStream。此类允许我们将 Java 对象的基本数据类型和图形写入 OutputStream,在需要将 Java 对象进行序列化操作时,使用该类可以极大为我们提供便利。但是使用不当也会引起一些麻烦。

需要说明的是,在使用 ObjectOutputStream 向 OutputStream 流中写入的时候会在流中添加写入 Object 的信息。这样的话在我们使用 ObjectOutputStream 编写跨语言的 Socket 通信时会遇到问题。因为数据流中加入的是 Java 特有的信息,如 Class 类型以及成员变量的类型信息,只有使用 ObjectInputStream 才能解析这些特定的信息。

好了,通过上面的说明,我们现在对 ObjectOutputStream 有了一个大体的了解,接下来我们使用具体的代码来看一下如果使用 ObjectOutputStream 来把对象序列化到对象中。

把 Java 对象序列化到文件中

首先我们有一个简单的 Java 对象类:

清单 1. 要序列化的 java 对象

class MyObject implements Serializable { 
  private static final long serialVersionUID = -9163423175612080544L; 
  String str1; 
  String str2; 
} 

接下来我们使用 ObjectOutputStream 把 MyObject 对象写入文件:

清单 2. 写入文件

FileOutputStream fos = new FileOutputStream("c:\\test.txt"); 
ObjectOutputStream oos = new ObjectOutputStream(fos); 
MyObject myObj = new MyObject(); 
myObj.str1 = "test1"; 
myObj.str2 = "test2"; 
oos.writeObject(myObj); 
fos.close(); 

1 2 3 4  下一页

Tags:剖析 使用 ObjectOutputStream

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