假设我有一个程序试图写入一个 CSV 文件,其中可能有数千个逗号分隔值和数千行。
现在,我只是为每个单独的字符重复调用 BufferedWriter 的写入函数,我想知道如果我将字符连接成一个长字符串并使用另一个类(例如 PrintWriter)写入它们是否会提高性能。
直观地说,我认为这两种方法都不会更快,因为这一切都归结为写入单个字节,但我想确定一下。
假设我有一个程序试图写入一个 CSV 文件,其中可能有数千个逗号分隔值和数千行。
现在,我只是为每个单独的字符重复调用 BufferedWriter 的写入函数,我想知道如果我将字符连接成一个长字符串并使用另一个类(例如 PrintWriter)写入它们是否会提高性能。
直观地说,我认为这两种方法都不会更快,因为这一切都归结为写入单个字节,但我想确定一下。
直观地说,我认为这两种方法都不会更快,因为这一切都归结为写入单个字节,但我想确定一下。
你的假设有点错误。较长数据的较少写入涉及(通常)较少的系统调用,并且比单独写入每个字节更快。
就好像你需要把 10 个箱子从一个城市搬到另一个城市,你可以把所有的箱子一起装在一辆卡车上,也可以一个一个地拿走。你仍然需要移动 10 个箱子 X 公里,但是这些方法之间存在很大的效率差异。
请注意,即使您使用 BufferedWriter 并多次调用 to write
,它实际上也不会每次都写入文件(这就是为什么它被称为Buffered Writer...)
现在,我只是为每个单独的字符重复调用 BufferedWriter 的写入函数,我想知道如果我将字符连接成一个长字符串并使用另一个类(例如 PrintWriter)写入它们是否会提高性能。
它是否会产生重大影响是值得怀疑的。
但是,我的直觉是,您当前的操作方式可能比构建字符串并编写它要快。另一种方法会产生分配多个(至少 2 个,可能更多)堆节点并将字符复制到临时字符串中的额外开销。我认为您不会在其他地方收回开销。但这是猜测。最重要的是输出堆栈中的某处有缓冲。
我的建议: