Java 转换为InputStream时出现NotSerializableException异常

Java 转换为InputStream时出现NotSerializableException异常,java,serialization,inputstream,Java,Serialization,Inputstream,当我将字节数组转换为Inputstream时,它会给出NotSerializableException异常。(请参阅下面的代码) 我已经检查了方法myBO.getAttachedFile()的返回,它是序列化的。所以我的问题是,为什么它在转换为InputStream后没有按照下面代码中所述进行序列化。myBO.getAttachedFile()的返回类型为字节[] 为了检查myBO.getAttachedFile()的序列化,我使用了下面的代码。它也不例外 try { n

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

我已经检查了方法myBO.getAttachedFile()的返回,它是序列化的。所以我的问题是,为什么它在转换为InputStream后没有按照下面代码中所述进行序列化。myBO.getAttachedFile()的返回类型为字节[]

为了检查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的序列化时,它在下面的代码中给出了异常

// return type of myBO.getAttachedFile() is byte[]
InputStream inputStream = new ByteArrayInputStream(myBO.getAttachedFile());
    try {
        new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(inputStream);
    } catch (Exception e) {
        logger.debug("========EXCEPTION====== Object Not Serialized");
        logger.debug(METHOD_NAME, e);
    }       

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

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

你真的不能序列化这样的东西。资源会泄漏出去(因此,如果您经常在太短的时间内这样做,您的环境将耗尽资源),并且指针在您反序列化它时不一定再有效,当然,在完全不同的环境中这样做时就不一定了


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

您发布的代码无法引发该异常,除非在您未向我们展示的地方存在隐藏的反序列化。异常是
NotSerializableException,
与标题中的内容不同。请准确。发布异常、消息和堆栈跟踪。关于序列化输入流的部分开始没有意义,但它无关紧要。您编辑了您的问题,但只解决了次要问题。如果没有堆栈跟踪,您将无法得到答案。所有这些都没有意义。发布的代码未引发的异常;一个多余的“证据”,证明InputStream是不可序列化的,这是我们知道的,而且似乎与真正的问题没有任何关系;当被询问时,未能发布真正的异常或真正的代码。“这毫无意义。”巴卢斯克不知道你的答案为什么被否决了。让我纠正一下;)