ObjectInputStream对FileInputStream感到满意,对getResourceAsStream不满意
2022-09-03 17:55:34
我有一些非常标准的代码,它从流中接收序列化对象,其基本如下所示:
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)
大多数情况下,我想知道如何解决这个问题,但我也希望了解两个输入流之间的区别......