0

Java で FileInputStream を使用して、一度にチャンクを読み取ってファイルを読み取ろうとしています。コードは次のとおりです。

        File file = new File(filepath);
        FileInputStream is = new FileInputStream(file);
        byte[] chunk = new byte[bytelength];
        int chunkLen = chunk.length;
        long lineCnt = 0;

        while ((chunkLen = is.read(chunk)) != -1) {

            String decoded = getchunkString(chunk);
            System.out.println(decoded);

            System.out.println("---------------------------------");

        }

次のように、バイト長 = 128 を使用して、より小さいファイルでテストしようとしています。

graph G{
biz -- mai
biz -- ded
biz -- ronpepsi
blaine -- dan
dan -- graysky
dan -- iancr
dan -- maxwell
dan -- foursquare
blaine -- neb
}

コードを実行すると、次のようにチャンクが読み取られます。

graph G{
biz -- mai
biz -- ded
biz -- ronpepsi
blaine -- dan
dan -- graysky
dan -- iancr
dan -- maxwell
dan -- foursquare
blaine
---------------------------------
 -- neb
}
iz -- mai
biz -- ded
biz -- ronpepsi
blaine -- dan
dan -- graysky
dan -- iancr
dan -- maxwell
dan -- foursquare
blaine
---------------------------------

2番目のチャンクがどのように来るのかわかりませんか? それだけであることを願っています

-- neb
    }

i debugg is.read(chunk)が 10 になり、次に -1 になると、最初のチャンクのみが出力されます。

4

1 に答える 1

1

バッファにガベージデータが含まれている可能性があるため、読み取ったバイト(この場合はchunkLen)までのバイトのみを使用する必要があります。

while ((chunkLen = is.read(chunk)) != -1) {
   for (int i = 0; i < chunkLen; i++){
    //read the bytes here
   }
}

または、以下のように文字列コンストラクタを使用できます

while ((chunkLen = is.read(chunk)) != -1) {
   String decoded = new String(chunk, 0, chunkLen);
   System.out.println(decoded);
   System.out.println("---------------------------------");
}

それに応じてコードを変更する必要があります。

于 2013-03-19T06:24:42.493 に答える