我有一些标准代码,可以从流中获取序列化的对象,大致如下:
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");在我的想法中,这两个应该做完全相同的事情。但是实际上,两者都会解析出有效(非 null)的流,但是FileInputStream会从getObjectFromStream(InputStream)方法中正确返回一个Object,而getResourceAsStream版本会抛出此异常:
java.io.StreamCorruptedException: invalid stream header: EFBFBDEF at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:800) at java.io.ObjectInputStream.(ObjectInputStream.java:297)主要的问题在于如何解决这个问题,但我也希望了解两种InputStream之间的区别...