1

このようにコードを書くと、「File not found access denied ......」というエラーが表示されます。

public class ImplRegistration implements IRegistration {
 @Override
    public boolean newRegistration(Registration_BE reg_be) {
        FileOutputStream fos = new FileOutputStream("serial.ser");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(reg_be);
    }
}

セキュリティ上の理由から、コードの 4 行目を次のように変更しました。

FileOutputStream fos = new FileOutputStream("f://serial.ser");

しかし、それは例外を示しましたjava.io.NotSerializableException: java.io.ByteArrayInputStream

オブジェクトをシリアル化するにはどうすればよいですか?

4

2 に答える 2

1

この場合のシリアル化操作は失敗します。これは、上記のコメントで Ted Hopp が述べているように、シリアル化しようとしているクラスに非一時的 (かつシリアル化できない) ByteArrayInputStream オブジェクトが含まれているためです。これを修正し、Registration_BE クラスをシリアライズ可能にするには、このフィールドを一時的なものとしてマークします。

class Registration_BE {
  // rest of class

  private transient ByteArrayInputStream bais = null;

  // rest of class
}

これにより、Registration_BE のシリアライゼーション プロセスから除外されますが、反対側でオブジェクトがデシリアライズされるときに初期化も解除されます。

逆シリアル化後に ByteArrayInputStream を初期化する場合は、Registration_BE クラスのカスタムのwriteObject / readObjectメソッドを作成することを検討してください。カスタム シリアライゼーションに関する多くのチュートリアルが Google で利用できます。このスレッドの情報は、開始するのに役立つ場合があります。

シリアル化での readObject/writeObject の使用

于 2013-06-12T04:43:27.020 に答える
0

オペレーティング システム (OS) パーティション内のファイルにアクセスしようとすると、アクセス拒否エラーが発生します。

于 2013-06-12T04:20:06.400 に答える