【问题标题】:getResourceAsStream.readAllBytes() reads more bytes than the source file actually has [duplicate]getResourceAsStream.readAllBytes() 读取的字节数比源文件实际具有的字节数多[重复]
【发布时间】:2019-09-04 05:11:05
【问题描述】:

我正在编写一个实用方法,用于将 .jar 文件中的文件加载到 ByteBuffer 中。由于某种原因,它返回的字节数比源文件中的字节数多。

相关代码(Full class):

try (var stream = getClass().getResourceAsStream(filePath)) {
  var bytes = stream.readAllBytes();

  log.info(bytes.length + " bytes or " + bytes.length / 1024 + "kb");
}

在测试我的方法时,我传入了一个文件路径“/fonts/m5x7.ttf”。根据 macOS 查找器,该文件的大小为 34,300 字节 (33kb) 或磁盘上的 37 KB。在测试我的方法时,会打印以下内容:39090 字节或 38kb。测试是在 macOS 上完成的,使用 Java 11 编译。

由于某种原因,我得到的文件比实际文件多 5KB。

编辑:奇怪的是,我能够加载一个 .png 文件就好了。我尝试加载另一个 .ttf 文件,但它有同样的问题。

我的方法输出:356958 字节或 348kb。实际文件大小:356,958 字节(磁盘上 393 KB)

【问题讨论】:

  • m5x7.ttf 只是一个测试文件吗?因为通常情况下,您不会将字体读入 ByteBuffer,而是将 InputStream 传递给字体加载方法。
  • 它的目的是在我的程序中实际使用。我正在使用包装本机库的 lwjgl。我正在使用的库需要作为 ByteBuffer 传递的字体数据。你可以在这里看到它的使用情况:(github.com/harding-capstone/engine/blob/…)

标签: java file jar io


【解决方案1】:

看来是maven的问题。

Java class.getResourceAsStream() returns incorrect byte

一旦我禁用了资源过滤,问题就不再出现了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    相关资源
    最近更新 更多