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

Get Values from array object using String type object id

如果我们将对象 ID 作为字符串值,是否有办法获取数组对象的值

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

一台 PC 向我发送一个数组,然后我从那台 PC 获取这个 id 作为字符串(使用套接字)。我想通过使用该对象名称来获取数组的内容。

客户

`
       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
            }

看来你对自己造成的情况有误解。

当你使用

out.println(someObject);

打印出来的是someObject.toString.

的结果

toString 的默认实现是对象的 class 名称、@ 和对象的 hashCode() 方法的结果的串联。

由于数组是一个不重写 toString 方法的对象,您将获得数组的 class 名称(对于 double[] 类型的数组,这将是 [D),然后是 @,然后是在该 JVM 中分配的任何哈希码。

也就是说,印刷品根本没有任何有用的信息。

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

由于您没有这样做,当您尝试阅读该行时,您得到的只是无意义的字符串表示形式。这是不是对象ID。它 不是 任何类型的参考。它只是数组类型和哈希码的无意义串联。

如果你使用类似

的东西
out.println(Arrays.toString(weatherDetails));

然后你会在输出中得到实际的数字,格式如

[40.5,31.972,17.60,5.3]

然后您就可以通过移除括号、用逗号分隔并在每个结果元素上使用 Double.parseDouble() 来在另一面阅读它。

请注意,这只是一种选择。您可以使用其他实际循环并以其他方式放置数据的方法。例如,将元素的数量放在第一行,然后每行放置一个元素。然后在读取端,读取第一行,解析为整型,然后就知道读取多少行了,每行读取并解析。或者您可以使用 DataOutputStreamObjectOutputStream.

只是不要尝试直接打印数组。这样做你不会得到任何有用的信息。