2

クライアントサーバーアプリケーションを実装しています。サーバーから文字列配列を送信していますが、クライアントコードからその文字列配列の内容を読み取りたいと思います。これどうやってするの;

クライアントから値を出力すると、次のような出力が得られます[Ljava.lang.String;@120d10

サーバ:

try {
                    PrintWriter r= (PrintWriter) i.next();

                    String[] s={"f","ff"};
                    r.println(s);

                    r.flush();
                } catch (Exception ex) {

                }

クライアント:

try {
                    while ((somestring= r.readLine()) != null) {
                        //When i print it i get something like [Ljava.lang.String;@120d10


                    }
                } catch (Exception ex) {}
4

4 に答える 4

3

配列を出力するときは、最初にtoString()を呼び出します。配列のデフォルトのtoString()は、type @ hashCode一般的に役に立たないを出力します。

あなたが意図したのは次のようなものでした

String[] arr={"f","ff"};
for(String s: arr)
    r.println(s);
于 2013-01-24T18:31:10.077 に答える
2

r.println(object)object.toString()何を印刷するかを知るための呼び出し。arraystringTo()メソッドはその値だけを返します([L配列を処理していることを意味します)。

すべての配列を出力する場合は、ループします。

for(String  str : s) {
  r.println(str + delimiter);
}

もちろん、有効な区切り文字(文字列内に表示されない区切り文字)を見つける必要があります。

于 2013-01-24T18:32:15.923 に答える
1

代わりに、 ObjectOutputStream / ObjectInputStreamの使用を検討する必要があります。次に、すべての種類のシリアル化可能なオブジェクト(配列を含む)を直接送信できます。

于 2013-01-24T18:31:14.233 に答える
1

配列内の各文字列ではなく、文字列の配列を印刷しようとしています。サーバーで次のようなことを試してください。

    try {
                PrintWriter r= (PrintWriter) i.next();

                String[] s={"f","ff"};
                for(String sElement : s)
                {
                    r.println(sElement);
                    r.flush();
                }

            } catch (Exception ex) {

            }
于 2013-01-24T18:32:49.247 に答える