java - JAR 资源输入流未读取请求的大小
问题描述
我运行以下代码:
public static void main(String[] args) {
InputStream stream = ClassLoader.getSystemResourceAsStream("resources/fonts/calibri.texture");
try {
int n = 458343;
byte[] a = new byte[n];
int i;
do {
i = stream.read(a);
System.out.println("request: " + n + ", read: " + i);
} while(i != -1);
} catch (IOException e) {}
}
在 Netbeans 中,输出为:
请求:458343,阅读:458343 请求:458343,读取:-1
用命令java -jar my_jar.jar
是:
请求:458343,阅读:50563 请求:458343,阅读:47392 请求:458343,阅读:52704 请求:458343,阅读:48790 请求:458343,阅读:48714 请求:458343,阅读:48903 请求:458343,阅读:63921 请求:458343,阅读:47532 请求:458343,阅读:49824 请求:458343,读取:-1
两种大小的总和为 458343,但是为什么 JAR 中资源的 InputStream 会有这样的行为呢?
解决方案
jar 中的资源需要解压才能使用,这可能就是为什么资源以更小的块返回的原因,而不是更有效的直接文件系统调用。块大小也可能是这里的一个因素。
推荐阅读
- graphql - 基本上每次代码更改都需要“清理干净”
- python-3.x - 如何从使用 DockerOperator 执行的容器内部获取日志?(气流)
- javascript - 查找和替换字符之间的单词
- android - Android 检查并请求权限后继续
- java - 在 android 9 上删除已弃用的充气城堡提供程序时出现问题
- php - 如何在 Laravel 6.11 中增加最大上传大小
- javascript - 如何在 Azure Web App 服务上启动 node.js 服务器?
- c# - 如何去除 PictureBox 中透明图像的边框?
- javascript - 每当 UI 更新时,是否会调用 Angular 模板函数?
- javascript - 如何使用 cy.fixture 从 json 文件中读取多条记录