我目前正在编写一个网络应用程序,该应用程序必须能够通过TCP连接发送一个2D整数数组和一个常规对象数组。
到目前为止,我的第一个也是唯一的解决方案是使用ByteArrayOutputStream和ObjectOutputStream,但这仅在我发送另一种类型转换的特定类型的数组时才有效。
现在这可以工作
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(2dArray);
Byte[] send = baos.toByteArray();
但是我只能在仅发送2d int数组的情况下使用此选项,因为我需要在另一端对它进行排版,并且如前所述,我希望能够发送不同类型的2d和常规数组。
除了ObjectOutputStream之外,还有其他可用于此目的的东西吗?
最佳答案
当您在远端收到一个对象时,您可以检查它是哪种对象。例如,您可以编写:
Object received = in.readObject();
if (received instanceof int[]) {
// received 1d array
int[] array1D = (int[]) received;
} else if (received instanceof int[][]) {
// received 2d array
int[][] array2D = (int[][]) received;
}
如果您使用其他方式进行通信,则仍然必须以某种方式指示要发送的数组的类型,因此始终会遇到相同的问题。