後で解析するファイルを読み込んでいます。ファイルのサイズが 1 MB を超える可能性は低いため、この段階では、これはおそらく重要な問題ではありません。しかし、ベスト プラクティスの理由から、操作を実行するのに最適な時期を知りたいのです。
例:
http://www.dzone.com/snippets/java-read-file-stringから貼り付けたメソッドを使用して、バッファを文字列に読み込んでいます。すべての空白を削除したいと思います。私の方法は現在これです:
private String listRaw;
public boolean readList(String filePath) throws java.io.IOException {
StringBuffer fileData = new StringBuffer(1024);
BufferedReader reader = new BufferedReader(
new FileReader(filePath));
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
listRaw = fileData.toString().replaceAll("\\s","");
return true;
}
そのため、文字列全体をクラス変数に格納するときに、文字列からすべての空白を削除します。
私にとって、これは処理が少なくて済みますが、メモリ使用量が増えていることを意味します。ベスト プラクティスの理由から変数を追加するときにreplaceAll()
、変数に操作を適用したほうがよいでしょうか? より多くの処理を使用しますが、余分な空白を渡すことは避けます。readData
fileData
これは、私が取り組んでいるような小さなファイルにはほとんど影響を与えないと思いますが、200MB のログ ファイルの場合はどうなるでしょうか?
それは完全に大文字と小文字に依存しますか、それとも私が従うほうがよいコンセンサスがありますか?
皆さん、ご意見ありがとうございます。Java を書くための正しい方向に私の考え方を向けるのにあなたが役立ったと確信しています。
提起されたポイントを考慮してコードを更新しました。ある時点で、私はスペースを保持したいかもしれないというドン・ロビーの提案を含めて. うまくいけば、物事は今よりよく読めます!
private String listRaw;
public boolean readList(String filePath) throws java.io.IOException {
StringBuilder fileData = new StringBuilder(51200);
BufferedReader reader = new BufferedReader(new FileReader(filePath));
char[] buf = new char[51200];
boolean spaced = false;
while(reader.read(buf) != -1){
for(int i=0;i<buf.length;i++) {
char c = buf[i];
if (c != '\t' && c != '\r' && c != '\n') {
if (c == ' ') {
if (spaced) {
continue;
}
spaced = true;
} else {
spaced = false;
}
fileData.append(c);
}
}
}
reader.close();
listRaw = fileData.toString().trim();
return true;
}