Хотя этот вопрос был опубликован некоторое время назад, я думаю, что было бы хорошо, чтобы выложить мой ответ здесь.
Я думаю, что в этом сценарии лучше всего использовать пакет FileChannel
из java.nio.channels
. Но это только в том случае, если вам нужна хорошая производительность! Вам необходимо получить FileChannel
через RandomAccessFile
, например:
java.nio.channels.FileChannel channel = new java.io.RandomAccessFile("/my/fyle/path", "rw").getChannel();
После этого вам нужно создать ByteBuffer
, где вы будете читать из FileChannel
.
это выглядит примерно так:
java.nio.ByteBuffer inBuffer = java.nio.ByteBuffer.allocate(100);
int pos = 0;
int aux = 0;
StringBuilder sb = new StringBuilder();
while (pos != -1) {
aux = channel.read(inBuffer, pos);
pos = (aux != -1) ? pos + aux : -1;
b = inBuffer.array();
sb.delete(0, sb.length());
for (int i = 0; i < b.length; ++i) {
sb.append((char)b[i]);
}
//here you can do your stuff on sb
inBuffer = ByteBuffer.allocate(100);
}
Надеюсь, что мой ответ вам поможет!