【发布时间】:2011-07-22 06:26:31
【问题描述】:
我有一些非常标准的代码,它从流中接收序列化对象,基本上看起来像这样:
对象 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) 方法返回一个对象,而 getResourceAsStream 版本抛出此异常:
java.io.StreamCorruptedException:无效的流标头:EFBFBDEF 在 java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:800) 在 java.io.ObjectInputStream.(ObjectInputStream.java:297)大多数情况下,我想知道如何解决这个问题,但我也希望了解两个 InputStream 之间的区别......
【问题讨论】:
-
我建议您更改文件名以检查它在两种情况下都在读取同一个文件。完成后不要忘记关闭流。 ;)
-
你在用蚂蚁吗?查看this post。
标签: java inputstream fileinputstream objectinputstream