gpt4 book ai didi

java - ObjectInputStream 对 FileInputStream 满意,对 getResourceAsStream 不满意

转载 作者:太空狗 更新时间:2023-10-29 23:02:06 27 4
gpt4 key购买 nike

我有一些非常标准的代码,它从一个流中获取一个序列化对象,它基本上看起来像这样:

  Object getObjectFromStream(InputStream is) {    ObjectInputStream ois = new ObjectInputStream(is);    return ois.readObject();  }

然后我的资源文件夹中有一个文件,因此在我的开发机器上,我可以将其作为文件或 JarResource 引用:

  InputStream is = new FileInputStream("/home/.../src/main/resources/serializedObjects/testObject");  InputStream is = this.getClass().getResourceAsStream("/serializedObjects/testObject");

在我看来,两者应该做完全相同的事情。然而,碰巧的是,两者都解析为有效(非空)流,但 FileInputStream 正确地从我的 getObjectFromStream(InputStream) 方法返回一个对象,而 getResourceAsStream 版本抛出此异常:

  java.io.StreamCorruptedException: invalid stream header: EFBFBDEF    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:800)    at java.io.ObjectInputStream.(ObjectInputStream.java:297)

大多数情况下,我想知道如何解决这个问题,但我也希望了解这两个 InputStreams 之间的区别...

最佳答案

EFBFBD 是 Unicode 替换字符 U+FFFD 的 UTF-8 表示。因此,看起来文件是通过某种编码转换过程传递的。

Maven 可能值得怀疑,尤其是它的资源过滤功能。

关于java - ObjectInputStream 对 FileInputStream 满意,对 getResourceAsStream 不满意,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5421879/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com