gpt4 book ai didi

java - 从 jar 或目录加载时文件的行为有所不同

转载 作者:行者123 更新时间:2023-12-01 04:37:57 25 4
gpt4 key购买 nike

我是一个java新手,有一个真正的拔毛器。希望有人能帮忙。

我有一个可以从小程序目录加载的二进制文件,但它只从小程序的 jar 文件中部分加载。

下面的代码以两种方式加载文件并进行比较。他们应该是相同的,但输出是“在字节 8181 处分歧”。

int spx_data_length = 158994;
byte[] spx_buf = new byte[spx_data_length];
byte[] spx_buf2 = new byte[spx_data_length];

// binary file in jar
InputStream is = Vocals.class.getResourceAsStream("0.raw");
is.read(spx_buf, 0, spx_data_length);
is.close();

// same binary file in applet directory
URL srcURL=new URL(getCodeBase(),"0.raw");
URLDataSource u_dat = new URLDataSource(srcURL);
is=u_dat.getInputStream();
is.read(spx_buf2, 0, spx_data_length);
is.close();

// compare them
for(int i=0;ispx_data_length;i++){
if(spx_buf[i] != spx_buf2[i]){
Obj[0]="divergence at byte "+i; win.call("show_string", Obj);
i=spx_data_length;
}
}

最佳答案

InputStream.read(byte[], int, int)将读取最多 spx_data_length 字节,但很可能读取更少。特别是在压缩数据的情况下(即从 JAR 中读取),它可能一次返回一个解压缩缓冲区中的数据。您应该循环直到读取返回 -1,或者使用类似 DataInputStream.readFully(byte[], int, int) 的内容。 。您应该比较读取的字节数:如果不同,则比较这些计数中较小者之后的字节就没有意义。

关于java - 从 jar 或目录加载时文件的行为有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17050932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com