2

送信に PrintWriter/BufferedWriter を使用し、読み取りに InputStreamReader を使用して、ソケット接続を介してプロパティの複数のインスタンスを送信しようとしましたが、すべてループを介して送受信されました。

送信者:

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
for (int i = 0; i < vector.size(); i++) {
    Properties mail = (Properties) vec.get(i);
    mail.store(bw, line);
    bw.newLine();
    bw.flush();
}

レシーバー:

ireader = new InputStreamReader(socket.getInputStream());
Properties[] mails=new Properties[c];
for (int i = 0; i < c; i++) {
    Properties p;// = new Properties();
    mails[i] = new Properties();
    mails[i].load(ireader);
}

しかし、ループ全体が完了した後にのみ、受信者から送信された最後の Properties オブジェクトを受信して​​いるだけです。これは、ソケットが最終的に閉じるまでレシーバーがロードされていることを意味します。ドキュメントには、load() の場合、基になるリーダーは戻った後も開いたままになっていると書かれていますが、実際に「いつ」戻るかを説明する部分を見逃していると思います。1 つのストリームで複数のプロパティを読み取るにはどうすればよいですか?

4

1 に答える 1

0

2 つの Properties インスタンスがあるとします。

A:

a=b
c=d

B:

e=f
g=h

これら 2 つのプロパティ インスタンスを送信すると、ネットワーク上で送信される内容は次のようになります。

a=b
c=d
e=f
g=h

そして受信者は、これが 2 つの異なるインスタンスを構成していることを知る方法がありません。ストリームの最後まですべてのプロパティを読み取り、読み取ったすべてのプロパティを 1 つのオブジェクトに格納します。

これら 2 つのオブジェクトを送信するには、別のプロトコルを見つける必要があります。

于 2012-10-22T20:35:08.217 に答える