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

时间:2013-06-11 18:15:26

标签: java jar applet

我是一个真正的拔毛器的java新手。希望有人可以提供帮助。

我有一个二进制文件,可以从applet的目录中加载, 但是只从applet的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;
  }
}

1 个答案:

答案 0 :(得分:0)

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