每当我在Java ME
、Android
或BlackBerry
中使用HttpConnection
类时,我都会使用DataInputStream
/DataOutputStream
类进行读取&通过远程服务器写入数据。然而,还有其他类,如InputStream
/OutputStream
,可以用于相同的目的。我用HttpConnection
看到了关于InputStream
/OutputStream
类的问题。所以我想从专家那里知道,这两者之间有什么区别?
DataInputStream
/DataOutputStream
是InputStream
/Outputstream
。InputStream
和OutputStream
是您可以使用的最通用的IO流,它们是Java中所有流的基类。您只能使用它们读取和写入原始字节。DataInputStream
写入格式化的二进制数据。您可以读取Bytes
、Integer
、Double
、Float
、Short
、UTF-8字符串以及这些数据的任何混合数据,而不仅仅是简单的未格式化字节。DataOutputStream
也是如此,只是它写入了这些更高级别的数据类型。
DataInputStream
/DataOutputStream
具有对InputStream
/OutputStream
的引用,其读取原始字节并将这些字节解释为先前提到的那些数据类型。
尽管从DataInputStream
中读取字符串不是一个好主意,因为它对底层InputStream
的字符编码做出了不可更改的假设。相反,最好使用Reader
,它将正确地将字符编码应用于底层字节流以读取数据。这就是DataInputStream
/DataOutputStream
用途有限的原因。通常,最好在进程之间交换文本数据,因为最容易让服务器和客户端就如何解析数据达成一致。交易二进制文件需要进行大量的比特处理,以确保每个过程都使用相同的语言。如果你有两个使用DataInputStream
/DataOutputStream
的Java进程,这很容易,但如果你想添加一个不是Java的新客户端,那么重用它会很困难。不是不可能,只是更难。
DataOutputStream只能处理基本类型。
它只能读/写原始类型和字符串。DataInput/OutputStream通常性能更好,因为它更简单。
ObjectInput/OutputStream可以读取/写入任何对象类型以及基元。如果您想发送复杂的数据,它的效率较低,但使用起来要容易得多。
使用ObjectOutputStream类,可以将实现Serializable
的类的实例写入输出流,并可以使用ObjectInputStream进行读回。
我认为对象*流是的最佳选择,直到您知道其性能存在问题为止。
DataOutputStream确保数据以独立于平台的方式格式化
OutputStream仅当传输原始二进制数据时。
DataOutputStream-这是一大好处。
两者之间没有显著的性能差异。