3

ファイルから行を読み取るために SeekableByteChannel を使用できますか。位置 (バイト単位) があり、行全体を読み取りたい。たとえば、このメソッドを RandomAccessFile に使用します

private static String currentLine(String filepath, long currentPosition)
{
   RandomAccessFile f = new RandomAccessFile(filepath, "rw");

  byte b = f.readByte();
  while (b != 10)
  {
    currentPosition -= 1;
    f.seek(currentPosition);
    b = f.readByte();
    if (currentPosition <= 0)
    {
      f.seek(0);
      String currentLine = f.readLine();
      f.close();
      return currentLine;
    }
  }
  String line = f.readLine();
  f.close();
  return line;  

}

SeekableByteChannel にこのようなものを使用するにはどうすればよいですか?膨大な数の行を読み取るのに高速になりますか?

4

1 に答える 1

-1

私はSeekableByteChannel3GBのような巨大なファイルを読み取るために使用していますが、非常にうまく機能しています...

try {
    Path path = Paths.get("/home/temp/", "hugefile.txt");
    SeekableByteChannel sbc = Files.newByteChannel(path,
        StandardOpenOption.READ);
    ByteBuffer bf = ByteBuffer.allocate(941);// line size
    int i = 0;
    while ((i = sbc.read(bf)) > 0) {
        bf.flip();
        System.out.println(new String(bf.array()));
        bf.clear();
    }
} catch (Exception e) {
    e.printStackTrace();
}
于 2014-01-21T14:24:33.503 に答える