gpt4 book ai didi

Groovy:附加到大文件

转载 作者:行者123 更新时间:2023-12-04 16:56:17 25 4
gpt4 key购买 nike

如何有效地附加到大文件。我有一个必须不断追加到文件的进程,随着文件大小的增长,性能似乎也变慢了。无论如何,是否可以使用 append 指定大缓冲区大小?

最佳答案

虽然 Don 的方法是有效的,但一般来说(它会抛出异常,因为语法错误,你需要 flush() a BufferedOutputStream ),我一直在计划进一步详细说明(这需要时间) .

Groovy does not provide I/O 操作的特殊对象。因此,您将使用 Java 的 FileOutputStream (用于写入字节)或 FileWriter (用于编写字符串)。两者都提供了一个接受 boolean 的构造函数。 append范围。
两者都存在装饰器( BufferedOutputStream BufferedWriter ),它们被缓冲。在此范围内,“缓冲”意味着内容不一定会立即写入底层流,因此有可能进行 I/O 优化。

Don 已经为 BufferedOutputStream 提供了样本,这是 BufferedWriter 的一个:

File file = new File("foo")
if (file.exists()) {
assert file.delete()
assert file.createNewFile()
}

boolean append = true
FileWriter fileWriter = new FileWriter(file, append)
BufferedWriter buffWriter = new BufferedWriter(fileWriter)

100.times { buffWriter.write "foo" }

buffWriter.flush()
buffWriter.close()

虽然 Groovy 不提供自己的 I/O 对象,但 Groovy JDK (GDK)通过添加便利方法增强了几种 Java 类型。在I/O输出范围内, OutputStream File 类型是相关的。

所以,最后,您可以使用“Groovy 方式”:
new File("foo").newOutputStream().withWriter("UTF-8") { writer ->
100.times { writer.write "foo" + it }
}

编辑:根据您的进一步询问:

没有任何 GDK 方法允许设置缓冲区大小。

如果重复调用,上面的“Groovy”代码将覆盖文件。 - 相比之下,以下代码将字符串附加到现有文件中,因此可以重复调用:
new File("foo").withWriterAppend("UTF-8") { it.write("bar") }

关于Groovy:附加到大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4103595/

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