1

我试图重建一个序列化对象并从中访问数据。

这就是我发送对象的方式。

    Socket socket = new Socket ("localhost", port);
    ObjectOutputStream out = new ObjectOutputStream (socket.getOutputStream());
    Tester t = new Tester("test");
    out.writeObject(t);
    out.flush();

这就是我收到它的方式

// 这就是服务器的构建方式

    private ServerSocket server;
    server = new ServerSocket(port);
    newsocket = server.accept();

// 这就是我实际获取对象的方式

    ObjectInputStream input = new ObjectInputStream(newSocket.getInputStream());
    Tester obj = (Tester) input.readObject();
    System.out.println(obj.getText());

但是我只得到以下输出

[Ljava.lang.StackTraceElement;@237360be 

我希望得到的是我在对象“Test”中发送的字符串。有什么我做错了吗?


我的 Tester 类看起来像这样

public class Tester implements Serializable {
    private String theMessage = "";

    public Tester(String message) {
        theMessage = message;
    }

    public String getText() {
         return theMessage;
    }
}
4

2 回答 2

2

试试这个

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream();
Tester tester0 = new Tester("test")
oos.writeObject(tester0);
oos.close();
System.out.println(tester0.getText());

ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
Tester tester = (Tester) ois.readObject();
System.out.println(tester.getText());

如果这不起作用,您的序列化代码中可能存在错误。

于 2013-01-03T21:27:40.467 回答
1

看来,您已将套接字侦听器的代码块包装到try...catch语句中,其中您catch以不正确的方式部分使用了某些记录器:它打印堆栈跟踪而不是打印错误原因。这是最可能的解释,为什么您会收到[Ljava.lang.StackTraceElement;....

实际上,您的套接字侦听器代码捕获了一些Exception,您必须以适当的方式打印它们。

于 2013-01-03T22:05:32.047 回答