大きなファイル (約 5-10Go) を解析し、いくつかの繰り返し文字列の位置 (バイト単位) を可能な限り高速に検索する方法を探しています。
以下のようなことをして、RandomAccessFile リーダーを使用しようとしました。
RandomAccessFile lecteurFichier = new RandomAccessFile(<MyFile>, "r");
while (currentPointeurPosition < lecteurFichier.length()) {
char currentFileChar = (char) lecteurFichier.readByte();
// Test each char for matching my string (by appending chars until I found my string)
// and keep a trace of all found string's position
}
問題は、このコードが遅すぎることです (おそらく、バイトごとに読み取るためですか?)。
私は以下の解決策も試しました。これは速度の点では完璧ですが、文字列の位置を取得できません。
FileInputStream is = new FileInputStream(fichier.getFile());
FileChannel f = is.getChannel();
ByteBuffer buf = ByteBuffer.allocateDirect(64 * 1024);
Charset charset = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = charset.newDecoder();
long len = 0;
while ((len = f.read(buf)) != -1) {
buf.flip();
String data = "";
try {
int old_position = buf.position();
data = decoder.decode(buf).toString();
// reset buffer's position to its original so it is not altered:
buf.position(old_position);
}
catch (Exception e) {
e.printStackTrace();
}
buf.clear();
}
f.close();
誰かが提案するためのより良い解決策を持っていますか?
よろしくお願いします(つづりが間違っていて申し訳ありません、私はフランス語です)