gpt4 book ai didi

java - Java程序执行过程中在文件中保存大量字符串

转载 作者:行者123 更新时间:2023-12-02 15:28:57 26 4
gpt4 key购买 nike

在我的程序中,主要逻辑是用不同的方法构造字符串,然后将它们按特定顺序保存在文件中。但是我的内存消耗非常高,所以我想知道如何在内存中保存更少的字符串。所以我会尽量简化程序以方便阅读。我的小字符串生成方法如下:

那么我的主要逻辑是这样的:

        BufferedWriter bw = new BufferedWriter(fw);
for(int i=1;i<1_000_000_000;i++){
bw.write(processMethod(i));
}
bw.close();

其中processMethod是一个调用generateTag等方法m次的方法,使用StringBuilder创建String并且然后保存到 BufferedWriter 。

public static String generateTag(final String tagName, final String name, final String value) {
StringBuilder attribute = new StringBuilder();
attribute.append("<tag:");
attribute.append(tagName);
attribute.append(" name=\"");
attribute.append(name);
attribute.append("\">");
attribute.append(value);
attribute.append("</tag:");
attribute.append(tagName);
attribute.append(">");
return attribute.toString();
}

因此,当我启动时,processMethod 执行1_000_000_000 次,然后调用 m 次generateTag 之类的方法。我的内存中有 1_000_000_000 * m 个字符串。我怎样才能轻松删除他们的创作?我想是这样的:

public static String generateTag(final String tagName, final String name, final String value, final BufferedWriter bf) {
....
bf.write(someBuilder.toString());
..

}

但是我认为传递 BufferedWriter 并不是一件好事。你能给我建议一些更少的字符串创建的描述吗?

enter image description here

enter image description here

最佳答案

如果您的程序确实只是一个接一个地调用方法,并且这些方法生成字符串,并且这些字符串按照生成的顺序写入文件,那么使用 main BufferedWriter 直接写入文件会更简单。 :

try (BufferedWriter bw = new BufferedWriter(fw);) {
for(int i=1;i<1_000_000_000;i++){
processMethod(i, bw);
}
}

(请注意,我使用了 try-with-resources 自动关闭缓冲写入器)。

然后当 processMethod来电 generateTag ,它将缓冲的写入器传递给它:

public void processMethod(int i, BufferedWriter bw) {
...
generateTag(...,bw);
...
}

generateTag将是:

public static void generateTag(final String tagName, final String name, final String value, final BufferedWriter bw) {
bw.write("<tag:");
bw.write(tagName);
bw.write(" name=\"");
bw.write(name);
bw.write("\">");
bw.write(value);
bw.write("</tag:");
bw.write(tagName);
bw.write(">");
}

BufferedWriter是有缓冲的,说明不是每次调用write都有磁盘访问,但每次缓冲区都被填满。因此这不会影响磁盘访问速度。但它会节省你所有的内存。

当然,如果你不串行写入结果,或者一个方法的结果依赖于另一个方法的结果,那么你需要修改它,但仍然应该在有下一个方法时立即写入一 block String准备好了。

关于java - Java程序执行过程中在文件中保存大量字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39043204/

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