ID #84098

通过Java套接字传递对象


  使用javaTM远程方法调用(RMI),可以很方便地开发分布式的基于对象的应用程序。RMI的简单性,是由网络通信的费用作为代价的。底层的套接字可以用来开发客户/服务器系统,但是由于大多数Java I/O类和对象不太轻易匹配,如何通过套接字传递完成的对象呢?对象序列化是一个答应您以比特流方式读/写完成对象的机制。

  将底层的套接字和对象序列化结合在一起,您将得到一个强大的、高效的、可替代RMI的机制,通过套接字来传递对象还能克服使用RMI的高费用的问题。

  对象序列化概述

  对象序列化机制对于需要将对象的状态保存到文件中,而后能够通过读入对象状态来重新构造对象,恢复程序状态,或者使用套接字在网络上传送对象的程序来说,是很有用的。通过让类实现java.io.Serializable 接口可以将类序列化。这个接口是一个制造者(marker)接口。也就是说,对于要实现它的类来说,该接口不需要实现任何方法。它主要用来通知Java虚拟机(JVM),需要将一个对象序列化。

  将对象读出或者写入流的主要类有两个: ObjectOutputStream与ObjectInputStream 。ObjectOutputStream 提供用来将对象写入输出流的writeObject方法, ObjectInputStream提供从输入流中读出对象的readObject方法。注重使用这些方法的对象必须被序列化,这非常重要。也就是说,这些类必须实现Serializable接口。

  序列化已经存在的类

  了解了对象序列化的基础知识之后,我们来看看如何对流读/写对象或现有的已序列化类实例。要将一个对象写入输出流,先建立一个输出流,然后使用writeObject对象保存到文件中。

  注重: Date类是可序列化的。换句话说,它实现 Serializable接口。

  例程 1: SaveDate.java

import java.io.*;
import java.util.Date;

public class SaveDate {

public static void main(String argv[]) throws Exception {
FileOutputStream fos = new FileOutputStream("date.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Date date = new Date();
oos.writeObject(date);
oos.flush();
oos.close();
fos.close();
}
}

  读入对象,然后重新构造它的状态都很轻易。例程2中的代码向您展示了如何读一个已经序列化的对象并且打印它的信息。

  例程 2: ReadDate.java

import java.io.*;
import java.util.Date;

public class ReadDate {

public static void main(String argv[]) throws Exception {
FileInputStream fis = new FileInputStream("date.out");
ObjectInputStream ois = new ObjectInputStream(fis);


2011-09-28 21:07
阅读:
I'm VC , Just U know Y
本站部分文章来源于互联网,版权归原作者所有。

延伸阅读:

《Java编程思想》(第二版)第7章:多态(polymorphism)

《Java编程思想》(第二版)第08章:接口与内隐类

《Java编程思想》(第二版)第6章:重复运用classes

利用JAVA API函数实现数据的压缩与解压缩

24点算法的java代码