ObjectDataOutput 接口中有 writeDoubleArray 等方法。当然阵列可以是任何尺寸,在我的例子中有一些2D双阵列。如何序列化然后反序列化?或者也许是因为Java处理2D数组的方式(内存中不是真正连续的块)我需要将2D数组表示为1D?我的意思是因为性能我不应该真正序列化2D数组。只需将其包装到实用程序对象中并像这样存储......?
答案 0 :(得分:2)
您必须先自己放置其他尺寸,例如以下代码段:
public static class Foo implements DataSerializable {
private double[][] multiDimArray;
@Override
public void writeData(ObjectDataOutput out)
throws IOException {
int firstDim = multiDimArray.length;
out.writeInt(firstDim);
for (int i = 0; i < firstDim; i++) {
out.writeDoubleArray(multiDimArray[i]);
}
}
@Override
public void readData(ObjectDataInput in)
throws IOException {
int firstDim = in.readInt();
multiDimArray = new double[firstDim][];
for (int i = 0; i < firstDim; i++) {
multiDimArray[i] = in.readDoubleArray();
}
}
}
这样就可以将两个深度的数组写入流中。您可以将这一点抽象为两个方法(读/写),以便更容易/更方便地使用。