DataSerializable - 序列化和反序列化二维数组

时间:2017-04-02 06:08:53

标签: arrays serialization deserialization hazelcast

ObjectDataOutput 接口中有 writeDoubleArray 等方法。当然阵列可以是任何尺寸,在我的例子中有一些2D双阵列。如何序列化然后反序列化?或者也许是因为Java处理2D数组的方式(内存中不是真正连续的块)我需要将2D数组表示为1D?我的意思是因为性能我不应该真正序列化2D数组。只需将其包装到实用程序对象中并像这样存储......?

1 个答案:

答案 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();
        }
    }
}

这样就可以将两个深度的数组写入流中。您可以将这一点抽象为两个方法(读/写),以便更容易/更方便地使用。