我正在阅读一个文件以供稍后解析。该文件的大小不可能超过 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 的正确方向。
我已经更新了我的代码以考虑提出的观点。包括 Don Roby 的建议,即在某些时候,我可能想保留空格。希望现在情况更好!
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;
}