当前位置: 首页 > 面试题库 >

ObjectInputStream对FileInputStream满意,对getResourceAsStream不满意

祁正阳
2023-03-14
问题内容

我有一些漂亮的标准代码,它从流中获取序列化的对象,基本上看起来像这样:

  Object getObjectFromStream(InputStream is){
    ObjectInputStream ois = new ObjectInputStream(is);
    返回ois.readObject();
  }

然后,我的资源文件夹中有一个文件,因此在开发机器上,我可以将其引用为文件或JarResource:

  InputStream是= new FileInputStream(“ / home /.../ src / main / resources / serializedObjects / testObject”);
  InputStream是= 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之间的区别…


问题答案:

EFBFBD是Unicode替换字符U + FFFD的UTF-8表示形式。因此,看起来文件是通过某种编码转换过程传递的。

Maven可能会令人怀疑,尤其是其资源过滤功能



 类似资料:
  • 问题内容: 我试图在中加载文件,而使用时却出现异常。但是,使用相同的路径时,我能够加载文件。两种方法有什么区别,为什么一种方法有效而另一种无效? 问题答案: 在和配偶的行为在本地磁盘文件系统上。问题的根本原因是其中的相对路径取决于当前工作目录。即从中启动JVM(在你的情况下为:Web服务器的目录)的目录。例如,这可能是或完全不同的东西,但是却并非 如此,或者你期望的是什么。在正常的项目中,该值为。

  • 我有下一个结构: > QUARKUS扩展'core',带有接口的某些接口和bean的某些容器: Quarkus扩展与SomeImpl bean的“实现”: quokus应用程序-'starter',它依赖于quokus扩展'实现'和jax rs控制器: 当我尝试启动应用程序时,我收到一个错误: 如何修复它?链接到项目https://github.com/flagmen/quarkus-test

  • 问题内容: 我想创建一个简单的JNI层。我使用Visual Studio 2008创建了一个dll(带有DLL作为选项的Win 32 Console Application项目类型)。我在调用本地方法时收到此异常: 生成的头文件是: 实现文件是: Java文件是: 当我调用本地方法“ Hello”时,我得到执行。 我观察到的另一件事是,当我使用以下命令在命令行中进行编译时:“ cl -I” C:\

  • 我无法使用Spring Boot连接Redis Sentinal节点。我在创建bean cacheManager和localCacheManager时收到UnsatisfiedDependencyException。我没有做错事。谁能帮我一下吗。 使用Spring boot版本- 2.6。Maven依赖项是- 代码- 代码 (重制模板) - 下面是我得到的错误代码- 取消刷新尝试:创建名为'loc

  • 我在stackoverflow上四处寻找类似的问题,但我找到的解决方案似乎都不适合我。我在一台Linux /Ubuntu机器上。我只是在练习JNI,但我发现了这个错误: 我提供了我的 .c、.h 和 .java文件。 .java文件: .c文件: .h 文件: 我使用这些命令生成. h文件,编译/生成. so文件,然后运行: JAVACnativetest.java javah-jni nativ

  • A是一个数组,B是A中所有元素的质因数阶,< code>size(A)=N (1 到目前为止,我还没有想过这个问题,所以没有什么成就,但是我保证我已经想了很久了,希望有帮助,谢谢!