我想写入套接字。通过阅读有关网络 IO 的内容,在我看来,写入网络的最佳方法是执行以下操作:
OutputStream outs=null;
BufferedWriter out=null;
out =
new BufferedWriter(
new OutputStreamWriter(new BufferedOutputStream(outs),"UTF-8"));
The BufferedWriter
将缓冲输入OutputStreamWriter
推荐这样做,因为它可以防止编写者为每个字符启动编码器。
The BufferedOutputStream
然后会缓冲来自的字节Writer
以避免一次将一个字节潜在地放到网络上。
看起来有点矫枉过正,但这一切似乎都有帮助?
感谢任何帮助..
编辑:从javadoc开始OutputStreamWriter
:
每次调用 write() 方法都会导致对给定字符调用编码转换器。生成的字节在写入底层输出流之前先累积在缓冲区中。该缓冲区的大小可以指定,但默认情况下它对于大多数用途来说足够大。请注意,传递给 write() 方法的字符不会被缓冲。
为了获得最高效率,请考虑将 OutputStreamWriter 包装在 BufferedWriter 中,以避免频繁的转换器调用。例如:
Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
Buffered* 类的目的是将小型写入操作合并为较大的写入操作,从而减少系统调用的数量并提高吞吐量。
由于 BufferedWriter 已收集缓冲区中的写入,然后将缓冲区中的字符转换为另一个缓冲区,并在单个操作中将该缓冲区写入底层 OutputStream,因此已通过大型写入操作调用了 OutputStream。因此,BufferedOutputStream 找不到任何可组合的东西,而且只是多余的。
顺便说一句,这同样适用于 BufferedWriter:只有当编写器一次只传递几个字符时,缓冲才会有帮助。如果您知道调用者只写入巨大的字符串,则 BufferedWriter 将找不到任何可组合的内容,并且也是多余的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)