我想写一个套接字。通过阅读有关网络IO的信息,在我看来,写给它的最佳方法是执行以下操作:
OutputStream outs=null;
BufferedWriter out=null;
out =
new BufferedWriter(
new OutputStreamWriter(new BufferedOutputStream(outs),"UTF-8"));
在BufferedWriter
将缓冲输入到OutputStreamWriter
这是推荐的,因为它防止了从作家启动每个字符的编码器。
然后,BufferedOutputStream
它将从中缓冲字节,Writer
以避免一次可能将一个字节放入网络。
看起来有点像杀伤力大,但似乎一切都有帮助?感谢您的帮助。
编辑:从上的javadoc OutputStreamWriter
:
每次调用write()方法都会导致对给定字符调用编码转换器。生成的字节在写入底层输出流之前会先在缓冲区中累积。可以指定此缓冲区的大小,但是默认情况下,它对于大多数用途来说足够大。请注意,传递给write()方法的字符不会被缓冲。
为了获得最高的效率,请考虑将OutputStreamWriter包装在BufferedWriter中,以避免频繁的转换器调用。例如:
Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
建议使用BufferedWriter缓冲输入到outputStreamWriter的输入,因为这会阻止编写器为每个字符启动编码器。
由谁推荐,在什么情况下推荐?“启动编码器”是什么意思?无论如何,您一次要写一个字符给作家吗?(我们对您使用作家的方式了解不多,这可能很重要。)
然后,BufferedOutputStream将缓冲来自Writer的字节,以避免一次将一个字节放入网络中。
是什么让您认为它将一次写入一个字节?我认为OutputStreamWriter
一次向底层写入器写入一个字节的可能性很小,除非您真的一次向其写入一个字符。
另外,我希望网络输出流使用类似Nagle算法的方法来避免发送单字节数据包。
与优化一样,您应该基于证据进行此操作…是否进行了这些缓冲层的测试?
编辑:只是为了澄清,我并不是说缓冲类是无用的。在某些情况下,它们 绝对 是正确的方法。我只是说,与 所有
优化一样,不应盲目使用它们。您应该考虑要优化的内容(处理器使用率,内存使用率,网络使用率等)并进行衡量。这里有许多重要因素-
尤其是写模式。如果您已经在“大块”地写字符数据块了,那么缓冲区的影响将相对较小。如果您实际上一次要写一个字符给作者,那么它们会更有意义。
问题内容: 从Selenium到WebDriver及其各自文档的更改可能会让我感到困惑。在文档中有关测试设计的部分中,讨论了使用Assert vs Verify( 例如AssertElementPresent)。但是,在阅读WebDriver教程并开始设置测试时,Python似乎没有提供此功能。我是否忽略了文档中的内容,这是否不适用于WebDriver,不适用于使用python,我应该使用pyth
dagger2是否可以和Guice一样与jersey一起使用? 是否有任何dagger2 servlet或dagger2 jersey项目?
问题内容: 我偶然发现了HAML,这是一种标记内容和编写HTML模板的有趣而精美的方法。 因为我使用Python和Django来满足我的Web开发需求,所以我想看看是否有HAML的Python实现(或一些类似的概念-不必完全相同)可以用来替代Django模板引擎。 问题答案: 它基本上是适用于Python的Haml,并且大多数语法都是相同的(并且在Django中有效)。这里有一些GHRML只是为了
我一直使用ElasticsearchIntegrationTest在没有elasticsearch服务器的情况下测试我的代码。我的类中的私有成员很少,所以考虑使用Powermock访问私有成员。在运行测试时,我得到异常。 Powermock是否可以与ElasticSearchintegrationTest一起使用?? 代码: 例外情况: 原因:javassist.CanNotCompileExce
我想让flume代理位于hadoop集群之外,并想知道是否有可能使用flume通过WebHDFS向hadoop集群发送消息。 如果没有,是否有使用WebHDFS的替代方案?使用多层水槽层仍然需要我在hadoop集群中运行水槽代理。
问题内容: 在Java中,先实例化ZipOutputStream还是先实例化BufferedOutputStream 无关紧要?例: 要么: 在我不科学的时光里,我似乎并没有说出太多区别。我在Java API中看不到任何说明这些方法之一是必需的还是首选的信息。有什么建议吗?似乎先压缩输出,然后将其缓冲以进行写操作会更有效。 问题答案: 你应该总是包裹用,绝不是相反。请参见以下代码: 如评论所述,和