使用String类型对象id从数组对象获取值

时间:2017-04-24 08:35:05

标签: java sockets client-server

如果我们将对象id作为String值

,是否有办法获取数组对象的值

//假设这是一个真实的对象id值,

PC向我发送数组,然后我从该PC获取此ID作为String(使用套接字)。我想通过使用该对象名称来获取数组的内容。

的客户端

`
       Random random = new Random();
        for ( int i = 0 ; i<5 ; i++ ) {
            weatherDetails[i] = random.nextDouble() * 100;
        }
        out.println(weatherDetails);

`

服务器

          while (true) {
      input = in.readLine();
      if (input == null) {
             return;
      }            
      System.out.println("Input value weather->" + input);//[D@514713
            }

1 个答案:

答案 0 :(得分:1)

您似乎误解了自己创造的情况。

使用时

out.println(someObject);

打印出的内容是someObject.toString的结果。

toString的默认实现是对象的类名称@的串联,以及对象的hashCode()方法的结果。< / p>

由于数组是一个不会覆盖toString方法的对象,因此您获得了数组的类名(对于类型为double[]的数组,这将是{ {1}}),后跟[D,后跟在该JVM中分配的任何哈希码。

也就是说,印刷品根本不包含有用的信息。

为了传输实际数据,您应该循环数组并以您能够阅读的某种形式打印其元素。

由于你没有这样做,当你试图读取这一行时,你得到的只是无意义的字符串表示。这是对象ID。它的是任何类型的引用。它只是数组类型和哈希码的无意义连接。

如果您使用了类似

的内容
@

然后,您将在输出中获得实际数字,格式为

out.println(Arrays.toString(weatherDetails));

然后,您可以通过移除括号,分隔逗号并在每个结果元素上使用[40.5,31.972,17.60,5.3] 来阅读另一方。

请注意,这只是一个选项。您可以使用其他方法实际循环并以其他方式放置数据。例如,将元素数放在第一行中,并在以下每行中放置一个元素。然后在阅读方面,读取第一行,将其解析为整数,然后您知道要读取多少行,读取每一行并解析它。或者您可以使用Double.parseDouble()DataOutputStream

请勿尝试直接打印数组。你没有得到任何有用的信息。