如果我像这样编写代码,则会出现错误“文件未找到访问被拒绝......”
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
。
如何序列化对象?
答案 0 :(得分: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上提供了许多关于自定义序列化的教程。此主题中的信息可能有助于您入门:
答案 1 :(得分:0)
如果您尝试访问操作系统(OS)分区中的文件,它将提供访问被拒绝错误。