1

私は本物のヘアプラーを持った 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;
  }
}
4

1 に答える 1

0

InputStream.read(byte[], int, int)バイトまで 読み取りますが、それより少ない読み取りが可能です。spx_data_length特に圧縮データ (つまり、JAR からの読み取り) の場合、一度に 1 つの解凍バッファーに相当するデータが返されることがあります。読み取りが返されるまでループするか-1、次のようなものを使用する必要がありますDataInputStream.readFully(byte[], int, int)。そして、読み取ったバイト数を比較する必要があります。それが異なる場合、これらのカウントの小さい方を過ぎたバイト数を比較してもほとんど意味がありません。

于 2013-06-12T07:35:34.420 に答える