我有一个大约 4MB 的文件,该文件是一个仅包含普通键盘字符的 ascii 文件。我尝试了 java.io 包中的许多类来将文件内容读取为字符串。逐个字符读取它们(使用 FileReader 和 BufferedReader)大约需要 40 秒,使用 java.nio 包(FileChannel 和 ByteBuffer)读取内容大约需要 25 秒。据我所知,这是更长的时间。有人知道有什么方法可以将这个时间消耗减少到大约 10 秒吗?甚至像使用 C 创建文件阅读器和从 java 调用这样的解决方案也可以。我使用下面的代码片段在 22 秒内读取了 4 MB 文件-
public static String getContents(File file) {
try {
if (!file.exists() && !file.isFile()) {
return null;
}
FileInputStream in = new FileInputStream(file);
FileChannel ch = in.getChannel();
ByteBuffer buf = ByteBuffer.allocateDirect(512);
Charset cs = Charset.forName("ASCII");
StringBuilder sb = new StringBuilder();
int rd;
while ((rd = ch.read(buf)) != -1) {
buf.rewind();
CharBuffer chbuf = cs.decode(buf);
for (int i = 0; i < chbuf.length(); i++) {
sb.append(chbuf.get());
}
buf.clear();
}
String contents = sb.toString();
System.out.println("File Contents:\n"+contents);
return contents;
} catch (Exception exception) {
System.out.println("Error:\n" + exception.getMessage());
return null;
}
}