1

如果我这样写我的代码,它会给出一个错误“文件未找到访问被拒绝......”

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

出于安全原因,我将代码的第四行更改为:

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 回答