Java 使用StringBuilder创建字符串,然后将结果打印到文件中,或者使用PrintWriter一次打印,有什么更快的方法?
我需要将我的列表(从1到1000的数字)打印到一个文件中 什么是工作更快: 创建StringBuilder并附加每个数字,然后使用PrintWriter打印此字符串(使用for循环:Java 使用StringBuilder创建字符串,然后将结果打印到文件中,或者使用PrintWriter一次打印,有什么更快的方法?,java,string,performance,optimization,time,Java,String,Performance,Optimization,Time,我需要将我的列表(从1到1000的数字)打印到一个文件中 什么是工作更快: 创建StringBuilder并附加每个数字,然后使用PrintWriter打印此字符串(使用for循环:for(int项:list){}) 或 立即使用PrintWriter 或者可能有最快的替代方法写入1000个值并不多,因此两种解决方案都可以完成任务。如果使用默认值(无自动换行),则与写入第一个值相比,它的性能应该类似。在这两种情况下,磁盘IO都应该是瓶颈 一旦你不得不处理巨大的输出,性能可能会变得重要,但在这种情
for(int项:list){}
)
或
立即使用PrintWriter
或者可能有最快的替代方法写入1000个值并不多,因此两种解决方案都可以完成任务。如果使用默认值(无自动换行),则与写入第一个值相比,它的性能应该类似。在这两种情况下,磁盘IO都应该是瓶颈 一旦你不得不处理巨大的输出,性能可能会变得重要,但在这种情况下,这两种方法都不是最优的。在这种情况下,如果IO性能至关重要,那么包可能值得一看
但是根据您的描述,我不建议使用
nio
,因为它的API很复杂。如果方便的话,可以从一个简单的StringBuilder
开始,或者直接使用PrintWriter
。这两种方法对于您的用例都应该足够了。编写1000个值不是很多,所以两种解决方案都可以完成任务。如果您使用d由于(无自动行刷新),它的性能应该与写入第一行的性能相似。在这两种情况下,磁盘IO都应该是瓶颈
一旦你不得不处理巨大的输出,性能可能会变得重要,但在这种情况下,这两种方法都不是最优的。在这种情况下,如果IO性能至关重要,那么包可能值得一看
但根据您的描述,我不建议使用nio
,因为它的API很复杂。如果方便的话,可以从简单的StringBuilder
开始,或者直接使用PrintWriter
。这两种方法对于您的用例都应该足够了
我需要将我的列表(从1到1000的数字)打印到一个文件中
什么是工作更快:
对不起,你问错问题了
- 0.5秒启动JVM并加载所需的类和其他预热活动
- 0.05秒创建/打开文件并将其关闭
- 0.05秒格式化和写入数据
但是,如果你真的想在这方面花费时间,那么就要科学。为自己编写一个基准测试,并衡量哪种方法更快。请在此处阅读如何正确使用Java进行基准测试:
- 0.5秒启动JVM并加载所需的类和其他预热活动
- 0.05秒创建/打开文件并将其关闭
- 0.05秒格式化和写入数据
但是,如果你真的想在这方面花费时间,那么就要科学。为自己编写一个基准测试,并衡量哪种方法更快。请在此处阅读如何正确使用Java进行基准测试:
PrintWriter
相当慢,因此使用StringBuilder
构建单个字符串的性能会更好,但是您可能不会注意到只有1000个值的任何差异。由于磁盘IO操作是最慢的部分,PrinWriter和StringBuilder之间的差异可以忽略不计。但是,不要猜测-measure!尝试两者。measure。调用PrintWriter
相当慢,因此使用StringBuilder
构建单个字符串的性能会更好,但是您可能不会注意到只有1000个值的任何差异。由于磁盘IO操作是最慢的部分,因此PrinWriter和StringBuilder之间的差异将非常小可以忽略不计。但是,不要猜测-测量!如果没有线程连接,则可以忽略同步开销,特别是当涉及磁盘IO时。@kofemann True,我删除了at语句。在我尝试的一个小示例中,这也没有什么不同。如果没有线程连接,则syn