簡體   English   中英

重建序列化對象

[英]Reconstructing serialized objects

我試圖重建一個序列化的對象並從中訪問數據。

這就是我發送對象的方式。

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

如果這不起作用,您的序列化代碼可能有錯誤。

看來,你已經將套接字監聽器的代碼塊包裝到try...catch語句中,你在catch部分中以一種不正確的方式使用了一些logger:它打印堆棧跟蹤而不是打印錯誤原因。 這是最可能的解釋,為什么你收到[Ljava.lang.StackTraceElement;...

實際上,您的套接字偵聽器代碼會捕獲一些Exception ,您必須以適當的方式進行打印。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM