2017-04-02 12 views
0

writeDoubleArrayなどのメソッドがObjectDataOutputインターフェイスにあります。もちろん配列はどの次元でも構いませんし、私の場合は2Dの二重配列がいくつかあります。どのようにシリアル化し、それらを逆シリアル化する? Javaが2D配列(メモリ内の実際には連続したブロックではない)を扱うため、2D配列を1Dのように表現する必要がありますか?パフォーマンスのために、2D配列を実際にはシリアル化してはいけません。これをユーティリティオブジェクトにまとめて、このように保存します...?DataSerializable - 2次元配列のシリアライズと逆シリアル化

答えて

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

その方法は、二つの流れの中に、配列の任意の深さを記述します。簡単に/より便利に使うために、2つの方法(読み書き)に少し離れたものを抽象化できるかもしれません。

関連する問題