【问题标题】:Send a serialized Custom object over the network via a Socket通过 Socket 在网络上发送一个序列化的自定义对象
【发布时间】:2015-03-14 09:47:11
【问题描述】:

我正在编写一个基本的服务器/客户端代码来使用套接字通过网络发送一些自定义对象。

我的自定义对象还有一些其他已经初始化自定义字段。
例如 ```

public class CustomObject implements Serializable {
    private ONE one = new ONE();        //ONE implements Serializeable
    private TWO two = new TWO();        //TWO implements Serializeable
    private THREE three = new THREE();  //THREE implements Serializeable
    String somestring = "piday";
    ....
    @Override
    public String toString() {
        return somestring + one;
    }
}

```

客户端,我正在编写这样的对象: ```

Socket s = new Socket(HOST,PORT);
new ObjectOutputStream(s.getOutputStream())
    .writeObject(machine);

并在 服务器 上接收它们,如下所示:

ServerSocket server = new ServerSocket(PORT);
try (Socket s = server.accept();
     ObjectInputStream inputStream = new ObjectInputStream(s.getInputStream())) {
            CustomObject machine = (CustomObject) inputStream.readObject();
            System.out.println(machine);
        } catch (ClassNotFoundException e) {
            System.err.println("Err! Could not cast");
        }

现在,在服务器端,一切运行都没有错误左右,问题是当我调试时,我看到 一个、tow 和三个 自定义对象是 NULL em>,但不是基本字符串 somestring

请问我在这个例子中遗漏了什么或做错了什么?

请注意一、二和三类型定义也实现了可序列化
所有自定义类定义服务器和客户端都可以访问

【问题讨论】:

    标签: java sockets serialization network-programming client-server


    【解决方案1】:

    我认为,最好的方法是首先序列化我们的对象(到 JSON 或 XML)。然后将此输出字符串转换为字节(可选)并通过套接字发送,另一方面,反转这些步骤以取回对象。

    此过程还允许您在未来实施加密(如有必要)。

    【讨论】:

    • 是的,我同意。我这样做只是为了学习目的。我遇到了这个问题,我需要知道到底出了什么问题。
    【解决方案2】:

    Java 序列化是一个非常强大的协议。 java.io.ObjectOutputStream 和 java.io.ObjectInputStream 是较高级别的类,它们当然是用较低级别的类(如 FileInputStream 和 FileOutputStream)包装的。我的问题是,当整个文件可以在 Objects 中读取时,为什么要逐字节读取文件。

    这里是对该过程的一个很好的解释。

    http://www.tutorialspoint.com/java/java_serialization.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      相关资源
      最近更新 更多