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("---------------------------------");

        }

我正在使用 bytelength =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
---------------------------------

我不明白第二块是怎么来的?我希望它应该只是

-- neb
    }

当我调试 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
   }
}

或者您可以使用 String 构造函数,如下所示

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 回答