java - 如何读取位于嵌套 JAR 内的图像资源的字节?

标签 java wildfly inputstream ear

我在尝试读取与 JAR 资源捆绑在一起的 PNG 图像的字节时遇到了困难。该文件位于 src/main/resources 目录中。

这是迄今为止我的代码:

byte[] bytes = {};
final InputStream defaultImageStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("/defaultLogo.png");
new DataInputStream(defaultImageStream).readFully(bytes);

该代码在 Wildfly 12 服务器上执行,该服务器位于作为 EJB 包含在 EAR 中的 JAR 中。

看来,getResourceAsStream 返回了封闭的 jar,而不是检索我请求的资源:

enter image description here

如何获取该图像?

其他信息:

  • 我在 EAR 中尝试了爆炸式和非爆炸式 JAR。结果相同。
  • 资源路径似乎正确。添加前缀“/resources”会导致方法返回 NULL。
  • 我尝试使用类的类加载器而不是线程上下文的类加载器。结果相同。
  • 我设想自己检查所附 JAR 的所有条目,但这似乎有点过分且困难:因为我有一个 JarInputStream 并且没有 JarFile,我该如何读取某个条目对应的数据?

最佳答案

我认为您的代码正在按预期工作。查看 DataInputStream 实例不会告诉您太多信息。看看内容,我想是你想要的图片。

关于java - 如何读取位于嵌套 JAR 内的图像资源的字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51024692/

相关文章:

大型 WSDL( Play Framework )上的 Java 内存不足错误

java - 指定 groovy-variable 的类型

java - HSEARCH000151 : Unable to get input stream from object of type byte

Java - 将形状添加到框架

java - "Swig to java (Android)": giving No such file or directory Error on generating Swig to Java file

java - 是什么让 WildFly 自动取消部署 EAR?

java - 部署在 Wildfly 8.2.1 上的 Java 8 应用的 Metaspace 内存消耗问题

java - 从 socket 和 inputStream 读取慢

c++ - Char数据类型输入问题

java - 如何将Java中的图片保存到多个blob中?