DataSerializable - 序列化和反序列化二维数组
DataSerializable - serialize and deserialize two dimensional arrays
ObjectDataOutput接口中有writeDoubleArray等方法。当然数组可以是任何维度的,在我的例子中有一些二维双精度数组。如何序列化然后反序列化那些?或者可能是因为 Java 处理二维数组的方式(在内存中不是真正连续的块)我需要将二维数组表示为一维数组?我的意思是因为性能我不应该真正序列化 2D 数组。只需将其包装到实用程序对象中并像这样存储...?
你必须自己先放其他维度,就像下面的片段:
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();
}
}
}
这样就可以将任意深度的数组写入流中。您也许可以将其抽象为两种方法 (read/write),以便更轻松/更方便地使用。
ObjectDataOutput接口中有writeDoubleArray等方法。当然数组可以是任何维度的,在我的例子中有一些二维双精度数组。如何序列化然后反序列化那些?或者可能是因为 Java 处理二维数组的方式(在内存中不是真正连续的块)我需要将二维数组表示为一维数组?我的意思是因为性能我不应该真正序列化 2D 数组。只需将其包装到实用程序对象中并像这样存储...?
你必须自己先放其他维度,就像下面的片段:
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();
}
}
}
这样就可以将任意深度的数组写入流中。您也许可以将其抽象为两种方法 (read/write),以便更轻松/更方便地使用。