- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一些非常标准的代码,它从一个流中获取一个序列化对象,它基本上看起来像这样:
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/
在 Spring Boot 应用程序(v. 1.3.2)中,我尝试使用 jOOQ 生成所有映射数据库表的 POJO,以便它们也被注释为与 JPA 一起使用。数据库是 PostgreSQL。 问题在于
我有一些非常标准的代码,它从一个流中获取一个序列化对象,它基本上看起来像这样: Object getObjectFromStream(InputStream is) { ObjectInpu
在我的 Node.js 代码上运行 JSLint 时,它显示 “'Uint8Array' was used before it was defined 。” Mozilla reference将其置于
我在 Xcode6、beta 6 左右创建了一个项目(今天升级到 b7)。使用 Swift,一直在为 iOS 8 SDK 等开发。 到目前为止,Storyboard 有两个 View Controll
我是一名优秀的程序员,十分优秀!