本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何序列化 Java 对象 - 将对象转换为 InputStream

发布于2024-11-23 22:00     阅读(347)     评论(0)     点赞(7)     收藏(2)


如果我像这样编写代码,就会出现错误“未找到文件,拒绝访问......”

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

我如何序列化该对象?


解决方案


在这种情况下,序列化操作失败,因为正如 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 的用途



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/693960/e11c265d53784acabd0c/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

7 0
收藏该文
已收藏

评论内容:(最多支持255个字符)