Следующая проблема: у меня большой текстовый файл с каждой строкой, содержащей 13 байтов. Я не хочу читать файл построчно обычным способом, используя InputStream. Я пытаюсь использовать каналы NIO и MappedByteBuffers для лучшей производительности и ограниченных ресурсов.
Так вот что я делаю до сих пор:
RandomAccessFile data = new RandomAccessFile("the_file.txt", "rw");
FileChannel channel = data.getChannel();
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, capacity);
Здесь емкость - это n * 13, чтобы убедиться, что в буфер помещаются только целые строки.
Но это не работает! Я заполняю буфер так:
int bytesRead = channel.read(buffer);
Но это еще не полный буфер! bytesRead не равно емкость , а в моем случае еще хуже bytesRead% 13 не равно ноль , что означает, что оно не содержит целых линии, в конце концов что-то отрезано. Как я могу прочитать определенное количество байтов в буфер? В моем случае мне нужно ровно n * 13 байтов, чтобы исходные строки не разбивались ...