[英]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.