我有一些非常标准的代码,它从流中接收序列化对象,基本上看起来像这样:
对象 getObjectFromStream(InputStream is) { ObjectInputStream ois = new ObjectInputStream(is); 返回ois.readObject(); }
然后我的资源文件夹中有一个文件,所以在我的开发机器上,我可以将它作为文件引用,也可以作为 JarResource 引用:
InputStream is = new FileInputStream("/home/.../src/main/resources/serializedObjects/testObject"); InputStream is = this.getClass().getResourceAsStream("/serializedObjects/testObject");
在我看来,两者都应该做同样的事情。然而,碰巧的是,两者都解析为有效(非空)流,但 FileInputStream 从我的 getObjectFromStream(InputStream) 方法正确返回了一个 Object,而 getResourceAsStream 版本抛出此异常:
java.io.StreamCorruptedException:无效的流标头:EFBFBDEF 在 java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:800) 在 java.io.ObjectInputStream.(ObjectInputStream.java:297)
大多数情况下,我想知道如何解决这个问题,但我也希望了解两个 InputStreams 之间的区别......