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()知道要打印什么。arraysstringTo()方法只返回那个值([L意味着你正在处理一个数组)。

如果要打印所有数组,请循环它。

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

当然,您必须找到一个有效的分隔符(一个不会出现在您的字符串中的分隔符)。

于 2013-01-24T18:32:15.923 回答
1

您应该考虑改用ObjectOutputStream / ObjectInputStream。然后就可以直接发送各种Serializable对象(包括数组)。

于 2013-01-24T18:31:14.233 回答
1

您正在尝试 println 字符串数组,而不是数组中的每个字符串。在服务器上尝试这样的事情:

    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 回答