【发布时间】:2010-12-02 16:45:26
【问题描述】:
如何从文件中读取数字???
当我使用 readInt 方法时,我得到一个大数字,它不等于文件中的数字。
怎么解决???
扫描仪不是个好主意,因为文件包含超过 10 亿个数字......这需要很长时间......
是的,文本文件。
文件包含数字分隔的空格符号。例如(test.txt)
1 2 4 -4004 15458 8876
public static void readByMemoryMappedFile(int buffer[], String filename) throws IOException
{
int count = 0;
RandomAccessFile raf = new RandomAccessFile(filename, "r");
try {
MappedByteBuffer mapFile = raf.getChannel().map(MapMode.READ_ONLY, 0, raf.length());
StringBuilder b = new StringBuilder();
try {
while (mapFile.hasRemaining()) {
byte read = mapFile.get();
if (read == ' ' && b.length() > 0) {
buffer[count++] = mapFile.getInt();//Integer.parseInt(b.toString());
b.delete(0, b.length());
} else {
b.append((char) read);
}
}
} catch (BufferUnderflowException e) {
// Всё, файл закончился
}
if (b.length() > 0) {
buffer[count++] = Integer.parseInt(b.toString());
}
} finally {
raf.close();
}
}
所以,我附上了报告:
// operation: time
reading: 39719 // t0
reading: 28297 // t1
reading: 56719 // t2
reading: 125735 // t3
reading: 199000 // t4
t0
如何改变得到这个的程序的行为:t0 ~ t1 ~ t2 ~ t3 ~ t4 ???
【问题讨论】:
-
关键问题,数据是二进制还是文本格式?您的问题不清楚。
标签: java file-io performance