2017-04-02 86 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(); 
     } 
    } 
} 

這樣就可以兩個寫入陣列中的任何深度成流。您可能可以稍微抽象出兩種方法(讀/寫),以便更方便地使用。

相關問題