2011-08-08 68 views
13

我对套接字还比较陌生,而且我还没有看到有关这个主题的任何信息。Java套接字:DataOutputStream或OutputStream?

要写入连接的插座,您可以使用

socket.getOutputStream().write 

或从插座OutputStream创建一个新的DataOutputStream和写入。

  • 什么被认为是“良好做法”,使用DataOutputStream或OutputStream? 大部分the examples我在网上找到了使用DataOutputStream(发送字符串,比如双向聊天)。
  • 通过OutputStream使用DataOutputStream有什么优缺点吗?
  • 例如,发送文件时,这两者之间的性能有什么不同?

回答

10

DataOutputStream确保数据格式化为独立于平台的方式。这是很大的好处。它确保了另一方的聚会能够阅读它。两者之间没有显着的性能差异。

只有在传输原始二进制数据时,您才应该使用OutputStream

+0

那么如果你想创建一个可以发送文件的独立于平台的Java应用程序,你会有什么建议吗? – David

+0

即使文件只包含原始字节,您仍然可以使用DataOutputStream发送它们,所以我会在所有情况下都使用DataOutputStream。 – JVerstry

+0

如果您使用它提供的额外API,则仅'DataOutputStream'才能确保数据以独立于平台的方式进行格式化。它的'write()'方法没有神奇的属性。如果你只使用它们,(a)完全没有性能差异,并且(b)根本没有必要使用'DataOutputStream'。如果您使用额外的API,则无法比较其性能。所以关于性能差异的说法基本上没有意义。 – EJP

2

如果您需要额外的API,请使用DataOutputStream。如果你不这样做,那没有意义。但是,如果您正在进行小写操作,您应该始终将套接字的输出流封装在BufferedOutputStream中,并且在适当时(即在您读取套接字之前)将该套接字的输出流封装为flush()

-1

刚才我开始了解数据输出流和outputstreamwriter在处理SOAP服务时的区别......我试图通过请求XML传递阿拉伯数据,但是在响应XML中我得到一些垃圾字符代替阿拉伯语数据然后我尝试编码(UTF-8)请求,但没有这样的方法在DataOutputStream中进行编码,因为您可以在发送请求之前在OutputStreamWriter中对请求进行编码。 OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream(),“UTF-8”); out.write(inputXML);

相关问题