我在看下面的例子
其中使用以下代码
try {
BufferedWriter out = new BufferedWriter(new FileWriter("outfilename"));
out.write("aString");
out.close();
}
catch (IOException e) {}
这样做的好处是什么
FileWriter fw = new FileWriter("outfilename");
我尝试过这两种方法,并且在一次附加到一个文件的任务上,它们的速度似乎相当。
在Javadoc中提供了关于这个问题的一个合理的讨论:
通常,Writer立即将其输出发送到基础字符或字节流。除非需要即时输出,否则建议将BufferedWriter包装在其write()操作可能会很昂贵的所有Writer周围,例如FileWriters和OutputStreamWriters。例如,
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
将缓冲PrintWriter的输出到文件。如果不进行缓冲,则每次调用print()方法都会导致将字符转换为字节,然后将这些字节立即写入文件中,这可能会非常低效。
如果您一次写大块的文本(例如整行),那么您可能不会注意到有什么不同。但是,如果您有很多代码一次附加一个字符,那么a的BufferedWriter
效率会更高。
编辑
根据以下安德鲁的评论,FileWriter
实际使用了自己的固定大小的1024字节缓冲区。通过查看源代码可以确认这一点。的BufferedWriter
来源,在另一方面,示出其使用和8192字节的缓冲区大小(默认值),其可以通过用户的任何其它期望的大小来配置。因此,似乎BufferedWriter
vs
的好处FileWriter
仅限于:
为了进一步搅浑水,在Java 6的实现的OutputStreamWriter
实际委托给StreamEncoder,使用它自己的缓冲区8192个字节的默认大小。而且该StreamEncoder
缓冲区是用户可配置的,尽管没有办法通过封闭直接访问它OutputStreamWriter
。
问题内容: 我正在做一个实验,我们必须读取一个外部文件,对数据进行一些统计,然后使用统计信息创建和写入新文件。除了编写文件,程序中的所有内容都可以正常工作,我无法理解为什么我的方法不起作用。 问题答案: 您必须冲洗并关闭编写器:
问题内容: 我正在浏览以下代码示例: 我想知道使用Iterator接口的实现而不是使用普通的for-each循环有什么好处? 如果此示例不相关,那么当我们应该使用Iterator时会是一个好的情况吗? 谢谢。 问题答案: 该 for-each循环 与Java 5中引入的,所以它不是那么“老”。 如果只想迭代一个集合,则应为每个循环使用 但是有时“普通的” 迭代器的 方法对于检查 迭代器 是否还有更
问题内容: 我正在尝试使用JFileChooser保存图像。我只希望用户能够将图像另存为jpg。但是,如果他们不输入.jpg,它将不会另存为图像。是否可以以某种方式将“ .jpg”附加到文件末尾? 在将字符串添加到文件时不起作用。 问题答案: 完成后,为什么不将转换为并创建一个新的呢? 请记住,如果已经存在,则不需要添加。
根据AsynchronousFileChannel和AsynchronousChannelGroup的文档,async NIO正在使用“IO事件处理”的专用线程池。在这个上下文中,我找不到任何明确的说明“处理”意味着什么,但根据这一点,我非常肯定,在一天结束时,阻塞会发生在那些专用线程上。为了缩小范围,我使用的是Linux,并且基于Alex Yursha的答案,它上没有非阻塞IO这样的东西,只有W
问题内容: 这是代码片段。 编辑:我正在从目录中读取文件。因此,我需要在每个循环中打开阅读器。我进行了一些修改,但同时也没有写入该文件。这是代码: 编辑:我修改了代码,但没有成功, 而且我收到此错误: 编辑:谢谢..我想通了。实际上,我在eclipse中创建了一个目录,但没有刷新它来查看内容。真是太傻了…还是非常感谢 问题答案: 您正在循环内创建FileWritter,因此您将始终在每个循环中截断
我正在使用下面的代码。然而,当我运行代码时,我想在同一个TXT文件中一个接一个地添加新的XML。这是否可以使用JDOM。请帮帮我。。 xmlOutput。输出(文档,新FileWriter(“c:\updated.txt”));是否需要修改?