Я просматривал сообщение, и в нем говорится либо использовать BufferedReader, либо MappedByteBuffer. Я решил проверить самостоятельно с файлом 291,0 МБ, но все еще не могу решить
BufferedReader reader = new BufferedReader(new FileReader("/Users/rachana/part-00000"));
String line = null;
while((line = reader.readLine())!=null) {
System.out.println(line);
}
~~~~~~ Heap utilization in MB ~~~~~~
Start Date 21:10:20
End Date 21:17:48
Time used 448 second
7.50 min
Used Memory In MB:28
Free Memory:81
Total Memory:109
Max Memory:1820
С MappedByteBuffer
RandomAccessFile aFile = new RandomAccessFile
("/Users/rachana/part-00000", "r");
FileChannel inChannel = aFile.getChannel();
MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size());
buffer.load();
for (int i = 0; i < buffer.limit(); i++)
{
System.out.print((char) buffer.get());
}
buffer.clear(); // do something with the data and clear/compact it.
inChannel.close();
aFile.close();
~~~~~~ Heap utilization in MB ~~~~~~
Start Date 21:20:40
End Date 21:33:52
Time used 792 sec / 13.2 min
Used Memory In MB:4
Free Memory:104
Total Memory:109
Max Memory:1820
В нем четко указано, что MappedByteBuffer использует меньше памяти, но больше времени, тогда как BufferedReader использует больше памяти, но меньше времени.
Я пытаюсь найти баланс и способ чтения строки с помощью MappedByteBuffer.
Любое предложение будет полезно
FileInputStream
с разными размерами буфера? - person ug_   schedule 19.07.2014System.out.println(line);
, так как это даст вам лучшие результаты тестов. - person sujithvm   schedule 19.07.2014