私は約4MBのファイルを持っています。ファイルは通常のキーボード文字のみを含むASCIIファイルです。java.ioパッケージの多くのクラスを試して、ファイルの内容を文字列として読み取りました。(FileReaderとBufferedReaderを使用して)文字ごとに読み取るには約40秒かかり、java.nioパッケージ(FileChannelとByteBuffer)を使用してコンテンツを読み取るには約25秒かかります。これは私の知識から少し長い時間です。誰かがこの時間の消費を約10秒に減らす方法を知っていますか?Cを使用してファイルリーダーを作成したり、Javaから呼び出したりするようなソリューションでもかまいません。以下のスニペットを使用して、4MBのファイルを22秒で読み取りました-
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;
}
}