【问题标题】:NotSerializableException Exception while converting to InputStream转换为 InputStream 时出现 NotSerializableException 异常
【发布时间】:2013-12-11 04:30:36
【问题描述】:

当我将字节数组转换为 Inputstream 时,它会给出 NotSerializableException 异常。 (请参考下面的代码)

// return type of myBO.getAttachedFile() is byte[]
InputStream inputStream = new ByteArrayInputStream(myBO.getAttachedFile());

我检查了方法 myBO.getAttachedFile() 的返回,它是序列化的。所以我的问题是为什么在转换为 InputStream 后它不是 SERIALIZE,如下面的代码中所写。 myBO.getAttachedFile() 的返回类型是 byte[]

为了检查 myBO.getAttachedFile() 的序列化,我使用了下面的代码。它没有给出异常

    try {
        new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(myBO.getAttachedFile());
    } catch (Exception e) {
        logger.debug("========EXCEPTION====== Object Not Serialized");
        logger.debug(METHOD_NAME, e);
    }       

当我检查 inputStream 的序列化时,它会在下面的代码中给出异常

    try {
        new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(inputStream);
    } catch (Exception e) {
        logger.debug("========EXCEPTION====== Object Not Serialized");
        logger.debug(METHOD_NAME, e);
    }       

【问题讨论】:

  • 您发布的代码不能抛出该异常,除非在您未向我们展示的地方存在隐藏的反序列化。例外是 NotSerializableException, 不是它在你的标题中所说的。请准确。发布异常、消息和堆栈跟踪。关于序列化输入流的部分开始没有意义,但它无关紧要。
  • 您已经编辑了您的问题,但您只解决了小问题。如果没有堆栈跟踪,您将不会得到答案。

标签: java serialization inputstream


【解决方案1】:

您正在尝试将整个InputStream 实例写入ObjectOutputStream,而不是它在内部引用的实际资源的内容。您只能编写实现Serializable interface 的实例,否则您将得到一个相当不言自明的NotSerializableException

InputStream class 确实实现了Serializable 接口。 InputStream 实例仅代表一个指向底层环境中打开的字节资源的指针。与byte[] 实例相反,InputStream 实例本身不包含您想要序列化的任何数据。 InputStream 实例只是底层环境上的实际字节资源(例如磁盘文件系统指针)和 Java 代码之间的“信使”。它能够以byte/byte[] 的形式读取数据并返回它,但它本身不会将它们存储在实例中的任何位置。它没有private byte[] alldata 左右的属性。

你真的不能序列化这样的事情。资源会泄漏(因此,当您在太短的时间内过于频繁地执行此操作时,您的环境将耗尽资源)并且指针在您反序列化它时不一定不再有效,肯定不是在您这样做时它在一个完全不同的环境中。

只需使用byte[]。或者,也许更好的是,忘记整个序列化尝试。根据具体的功能要求,这很可能对您想要实现的任何目标都没有任何意义。

【讨论】:

  • 没有任何意义。发布的代码没有抛出的异常; InputStream 不可序列化的冗余“证明”,我们知道,并且似乎与真正的问题没有任何关系;在被问到时未能发布真正的异常或真正的代码。这是没有意义的。
  • @BalusC 不知道为什么你的回答被否决了。让我纠正这个;)
猜你喜欢
  • 2015-03-27
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
相关资源
最近更新 更多