0

後で使用する Java 3D オブジェクト (球、カラーキューブなど) のバイナリ ファイルを作成するプログラムを作成してみてください。しかし、これを行う前に、オブジェクトをシリアル化する必要がありますが、できません。エラーが発生しました。

プログラムを見てみましょう----

次のクラスは、ColorCube オブジェクトを作成し、バイナリ ファイルに書き込むメイン クラスです。

import com.sun.j3d.utils.geometry.ColorCube;
import java.io.*;

public class SerializeDemo {

   public static void main(String [] args) {

   DoSerialize e = new DoSerialize();
   e.cc = new ColorCube(1.4);

   try {
     FileOutputStream fileOut = new FileOutputStream("e://objectFile.txt");
     ObjectOutputStream out = new ObjectOutputStream(fileOut);

     try {

     out.writeObject(e);
     }catch(NotSerializableException i)
       {i.printStackTrace();}

     out.close();
     fileOut.close();
    }catch(IOException i)
    {i.printStackTrace();}
  }
}

これはシリアライズ可能なクラスです ---

import com.sun.j3d.utils.geometry.ColorCube;

public class DoSerialize implements java.io.Serializable {
  public ColorCube cc;
}

そして、エラーは----です

java.io.NotSerializableException: com.sun.j3d.utils.geometry.ColorCube
  at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
  at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
  at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
  at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
  at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
  at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
  at SerializeDemo.main(SerializeDemo.java:25)
BUILD SUCCESSFUL (total time: 2 seconds)

では、この問題を克服するにはどうすればよいでしょうか。助けてください。ありがとう......

4

1 に答える 1

0

残念ながら、シリアライズしようとしているオブジェクトはシリアライズ可能なインターフェースを実装していないため、標準の Java 手段でシリアライズすることはできません。

オブジェクトを手動でシリアル化する必要があります。この場合、すべてのパブリック プロパティを取得してファイルに保存し、同じ順序で読み取るか、リフレクションを使用してすべてのアクセス可能なメンバーを取得し、ゲッターを見つけようとする必要があります。

最初の方法は、多くのオブジェクトに使用すると非常に面倒で、2 番目の方法は比較的遅くなります。残念ながら、どちらも正しく動作することを保証するものではありません。

于 2013-01-17T07:15:40.337 に答える