0

Java を使用して異なるバイト配列に分割されたファイルが結合された場合、ファイルのアプリケーションによってレンダリングされません。これは、元のファイルと再結合されたファイルの両方でバイト数が同じ場合でも発生します。

ここでの目的は、大きなファイルを異なるバイト配列に分割し、ネットワーク経由で別のプログラミング言語 (C#) を使用してこれらのバイト配列を再結合することです。

分割用に書いたコードは次のとおりです。

File f = new File(fileLoc);
FileInputStream fi = new FileInputStream(f);
int size = fi.available();

int MB2 = 1048576 * 2;
int total = size / MB2;
if (size % MB2 != 0) {
    total += 1;
}
int ch;

while (size > 0) {
    int arraysize;
    if (size < MB2) {
        arraysize = size;
    } else
        arraysize = MB2;
    byte bytes_read[] = new byte[arraysize];
    ch = fi.read(bytes_read, 0, arraysize);
    // The byte_read is added to an array list of byte[]
    // and send along with certain other parameters 
    size = size - ch;
    count++;
}
fi.close();
4

1 に答える 1

2

2 つの問題があります。

  • available()ファイルの長さを知る方法として使用しています。それはメソッドが行うことではありません。available() はほとんど使用しないでください。それを使用することが良いアイデアであるユースケースを見たことがありません。
  • メソッドを使用していて、read()その戻り値を無視します。サイズ変数を減らすために使用しますが、バイト配列が読み取りバイトで埋められているか、ゼロで埋められているかは気にしません。read()要求したバイト数を読み取ることは保証されていません。

バイトがネットワーク経由で送信され、反対側でも読み取られる方法に、他のエラーがある可能性があります。

于 2012-11-06T07:57:35.160 に答える