Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重建序列化对象_Java_Deserialization - Fatal编程技术网

Java 重建序列化对象

Java 重建序列化对象,java,deserialization,Java,Deserialization,我试图重建一个序列化对象并从中访问数据 这就是我发送对象的方式 Socket socket = new Socket ("localhost", port); ObjectOutputStream out = new ObjectOutputStream (socket.getOutputStream()); Tester t = new Tester("test"); out.writeObject(t); out.flush(); 这就是我收到它的方

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

这就是我发送对象的方式

    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;
    }
}
试试这个

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());

如果这不起作用,您的序列化代码中可能有一个bug。

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


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

您显示的代码看起来很好。您正在尝试将堆栈跟踪打印为数组,这至少可以说是不寻常的。我们可以查看
getText()的代码吗
method?向我们展示如何构造
newSocket
对象?也许客户端和服务器上有不同版本的类?但我希望看到实际的异常,而不是序列化堆栈跟踪。您可以尝试删除序列化,看看是否可以发送/接收带有读写器的简单字符串,查看是套接字问题还是序列化问题。无法重现错误。代码运行正常,输出为“测试”。嗨,Peter,我在接收端收到错误(找不到符号BAS)我需要在某个地方设置它吗?您需要在一个方法/测试中运行代码。它在一开始就定义了。@russoue,我同意,但这是最可能的解释。