2017-04-02 75 views
0

有几种方法,如writeDoubleArray等等ObjectDataOutput接口。当然,数组可以是任何维度,在我的情况下,有一些2D双数组。如何序列化,然后反序列化这些?或者也许是因为Java处理2D数组的方式(内存中不是连续的块),我需要将二维数组表示为一维数组?我的意思是因为性能,我不应该真正序列化二维数组。只需将它包装到实用程序对象中并像这样存储......?DataSerializable - 对二维数组进行序列化和反序列化

回答

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

这样就可以两个写入阵列中的任何深度成流。您可能可以稍微抽象出两种方法(读/写),以便更方便地使用。

相关问题