2009-09-23 14 views
12

2次元配列をJavaでシリアライズ可能にすることは可能ですか?多次元配列のJavaシリアル化

もしそうでなければ、私は3x3の2D配列をベクトルのベクトルに "翻訳"しようとしています。

私はベクターで遊んでいましたが、私はまだそれを表現する方法がわかりません。誰でも助けてくれますか?

ありがとうございます!

答えて

18

Javaの配列は直列化可能です。したがって、配列の配列も直列化可能です。

これらのオブジェクトには含まれていない可能性がありますので、配列の内容がシリアライズ可能であることを確認してください。そうでない場合は、そうしてください。

ここでは、intの配列を使用した例を示します。

public static void main(String[] args) { 

    int[][] twoD = new int[][] { new int[] { 1, 2 }, 
      new int[] { 3, 4 } }; 

    int[][] newTwoD = null; // will deserialize to this 

    System.out.println("Before serialization"); 
    for (int[] arr : twoD) { 
     for (int val : arr) { 
      System.out.println(val); 
     } 
    } 

    try { 
     FileOutputStream fos = new FileOutputStream("test.dat"); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     oos.writeObject(twoD); 

     FileInputStream fis = new FileInputStream("test.dat"); 
     ObjectInputStream iis = new ObjectInputStream(fis); 
     newTwoD = (int[][]) iis.readObject(); 

    } catch (Exception e) { 

    } 

    System.out.println("After serialization"); 
    for (int[] arr : newTwoD) { 
     for (int val : arr) { 
      System.out.println(val); 
     } 
    } 
} 

出力:

Before serialization 
1 
2 
3 
4 
After serialization 
1 
2 
3 
4 
+0

フム、大丈夫。私の多次元配列には整数だけが含まれていますが、配列自体が本当にシリアル化可能であることを知ってうれしく思います... – littleK

+0

intsを使って動作します。なぜ問題が発生しているのかわかりません。がんばろう! – Brabster