通过网络进行Java序列化

时间:2009-04-02 01:37:51

标签: java serialization network-programming

只是想知道是否有一个教程或如何序列化对象,将它们放入网络流中,并在另一侧反序列化。我理解序列化,I / O,流,套接字等的原理,我只想了一个客户端向服务器发送对象的示例。

4 个答案:

答案 0 :(得分:10)

This(pdf)是一个有用的教程,它将引导您完成序列化和套接字的基础知识,然后将这两个概念结合在一起(大约在幻灯片的一半),以展示如何序列化对象并发送它从客户端到服务器(没有RMI)。我认为这正是你想要的。

答案 1 :(得分:7)

实际上它非常简单。只需使您的对象可序列化,并创建一个ObjectOutputStream和ObjectInputStream,它们连接到您拥有的任何底层流,比如FileInputStream等。然后只需将()所需的任何对象写入流并在另一侧读取它。

对你说example

答案 2 :(得分:5)

Java使用ObjectOutputStream(和ObjectInputStream)提供(二进制)对象序列化。您可以将writeObject()放入流中,将readObject()放在另一端。 您需要做的就是实现Serializable接口。

但是,不是手动执行此操作,您可能有兴趣将其升级为一级并使用Remote Method Invocation。使用RMI,您可以在另一个JVM中的对象上调用方法,并且所有序列化和网络都在幕后进行。

为了完整起见,如果你不能使用二进制格式,还有XML bean serialization。这种XML格式非常通用(阅读:冗长和丑陋),但是有一些流行的库(如XStream)可以创建替代的XML序列化。

答案 3 :(得分:2)

您可以使用java api创建对象流并发送任何可序列化对象。但是你必须要记住,这些都是通过网络解密的:

在发件人方面:

CustomObject objectToSend=new CustomObject();
Socket s = new Socket("yourhostname", 1234);
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
out.writeObject(objectToSend);
out.flush();

并在接收端:

ServerSocket server = new ServerSocket(1234);
Socket s = server.accept();
ObjectInputStream in = new ObjectInputStream(s.getInputStream());
CustomObject objectReceived = (CustomObject) in.readObject();