我想写入一个套接字。从阅读有关网络IO,在我看来是写的最佳方式是做这样的事情:将BufferedWriter和BufferedOutputStream一起使用是否过分矫枉过正?
OutputStream outs=null;
BufferedWriter out=null;
out =
new BufferedWriter(
new OutputStreamWriter(new BufferedOutputStream(outs),"UTF-8"));
的BufferedWriter
将缓冲输入到其建议的OutputStreamWriter
,因为它阻止了作家从为每个角色启动编码器。
然后BufferedOutputStream
将缓冲来自Writer
的字节,以避免一次一个字节可能放到网络上。
它看起来有点像矫枉过正,但它似乎都有帮助? 感谢您的帮助..
编辑:根据JavaDoc上OutputStreamWriter
:
写入中的每一个调用()方法会导致在给定的字符(或多个)将被调用的编码转换器。生成的字节在写入底层输出流之前会在缓冲区中累积。这个缓冲区的大小可以被指定,但是默认情况下它对于大多数目的来说足够大。请注意,传递给write()方法的字符不会被缓冲。
为了获得最高的效率,可以考虑在BufferedWriter中封装一个OutputStreamWriter,以避免频繁的转换器调用。例如:
感谢您的回复。从OutputStreamWriter的javadoc中,“write()方法的每次调用都会导致编码转换器在给定字符上被调用。生成的字节在写入底层输出流之前会在缓冲区中累积。这个缓冲区可以被指定,但是默认情况下它对于大多数目的来说足够大了。注意传递给write()方法的字符没有被缓冲。为了获得最高的效率,可以考虑在BufferedWriter中包装一个OutputStreamWriter,以避免频繁的转换器调用“。 OP中的整个报价编辑 – Bruce 2013-04-03 22:24:47
@Bruce:*考虑*,当然。这与推荐*不一样。我会测试它。尽管如此,我仍然很惊讶地发现它在大多数情况下都有显着的不同。 – 2013-04-03 22:26:10
感谢您的有用答复。是的,我应该测试它。它实际上是我为面试做的编程测试的一部分,我想知道那种默认的正确解决方案是什么,或者至少有一个没有明显错误。 – Bruce 2013-04-03 22:31:19