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」で送信した文字列でした。私が間違っていることはありますか?


私のテスタークラスは次のようになります

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 に答える