【问题标题】:Java serialization over network通过网络进行 Java 序列化
【发布时间】:2009-04-02 01:37:51
【问题描述】:

只是想知道是否有用于序列化对象的教程或操作方法,将它们放入网络流中,然后在另一端反序列化。我了解序列化、I/O、流、套接字等的原理,我只想从客户端向服务器发送对象的示例开始。

【问题讨论】:

    标签: java serialization network-programming


    【解决方案1】:

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

    【讨论】:

    • 真正展示如何使用序列化和套接字,谢谢!
    【解决方案2】:

    其实很简单。只需使您的对象可序列化,并创建一个 ObjectOutputStream 和 ObjectInputStream 连接到您拥有的任何底层流,例如 FileInputStream 等。然后只需将您想要的任何对象写入流并在另一端读取它。

    这是一个example 给你。

    【讨论】:

    • 您可能希望在关闭资源时比该示例更加小心。
    【解决方案3】:

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

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

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

    【讨论】:

    • XStream 还提供 JSON 序列化(使用 Jettison),这在跨语言项目中非常有用:www.json.org
    • 从来没有听说过 RMI,好像是微软技术中的 WCF,希望我没有错……谢谢你的想法!
    • @elbaid 更像 RPC
    【解决方案4】:

    您可以使用 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();
    

    【讨论】:

    • 我想知道有多少人使用本机序列化而不是其他传输/编码库。到目前为止,我知道他们唯一需要注意的是安全性,但这可以通过 SSL 来解决。我仍然想知道速度差异,我想原生序列化正在进行中
    猜你喜欢
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多