Java: чтение строк из файла с произвольным доступом с буферизованным вводом

Я никогда раньше не сталкивался с Java IO API, и сейчас я очень расстроен. Мне трудно поверить, насколько это странно и сложно, и как сложно выполнить простую задачу.

Моя задача: у меня 2 позиции (начальный байт, конечный байт), pos1 и pos2 . Мне нужно прочитать строки между этими двумя байтами (включая начальный, не включая конечный) и использовать их как объекты String UTF8.

Например, на большинстве языков сценариев это было бы очень просто 1-2-3 -liner вроде этого (в Ruby, но по сути он будет таким же для Python, Perl и т. д.):

f = File.open("file.txt").seek(pos1)
while f.pos < pos2 {
  s = f.readline
  # do something with "s" here
}

Он быстро превращается в ад с API ввода-вывода Java;) На самом деле, я вижу два способа чтения строк (заканчивающиеся на \ n ) из обычных локальных файлов:

  • RandomAccessFile имеет getFilePointer () и seek (long pos) , но это readLine ( ) читает строки не в формате UTF8 (и даже не байтовые массивы), а очень странные строки с нарушенной кодировкой, или что-то в этом роде - эти счетчики, кажется, округляются с шагом в 16К.

    Действительно ли мне нужно реализовать все это самостоятельно, то есть интерфейс чтения файлов, который:

    • позволяет мне получать / устанавливать позицию в file
    • операции чтения буферного файла
    • позволяют читать строки UTF8 (или, по крайней мере, разрешать такие операции, как «читать все до следующего \ n »)

    Есть ли способ быстрее, чем реализовать все это? себя? Наблюдаю ли я за чем-то?

7
задан GreyCat 29 November 2010 в 15:19
поделиться