gpt4 book ai didi

java - 执行操作的最佳时间 : within, 或循环后

转载 作者:行者123 更新时间:2023-12-01 06:36:04 25 4
gpt4 key购买 nike

我正在读取一个文件以便稍后解析。该文件的大小不太可能超过 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;
}

因此,在将字符串完整存储到类变量时,我删除了字符串中的所有空格。

对我来说,这意味着更少的处理,但更多的内存使用。出于最佳实践原因,当我将 readData 变量附加到 fileData 时,我最好对 readData 变量应用 replaceAll() 操作吗?使用更多处理,但避免传递多余的空格。

我想这对于像我正在处理的小文件影响不大,但如果它是一个 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;
}

最佳答案

您最好仅在最后创建并应用正则表达式替换一次。但你会收获更多

  • 使用合理的大小初始化 StringBuilder
  • 避免在循环内创建 String,并将读取的字符直接附加到 StringBuilder
  • 避免在每次迭代时实例化新的 char 缓冲区。

为了避免创建不必要的长临时字符串,您可以逐个字符地读取字符,并且仅将字符 not a whitespace 附加到 StringBuilder。 。最后,StringBuilder 将仅包含好的字符,并且您不需要任何 replaceAll() 调用。

关于java - 执行操作的最佳时间 : within, 或循环后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11703062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com