DataInputStream / DataOutputStream类和InputStream / OutputStream类之间的区别

每当我在Java MEAndroidBlackBerry使用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确保以独立于平台的方式格式化数据

仅在传输原始二进制数据时才使用OutputStream

DataOutputStream – 这是一个很大的好处。

两者之间没有显着的性能差异。

DataOutputStream只能处理基本类型。

它只能读/写初始类型字符串 .DataInput / OutputStream通常执行得更好,因为它更简单。

ObjectInput / OutputStream可以读/写任何对象类型以及原语 。 如果要发送复杂数据,效率会降低,但更容易使用。

使用ObjectOutputStream类,可以将实现Serializable的类的实例写入输出流,并可以使用ObjectInputStream进行回读。

我会假设Object * Stream最好的选择,直到你知道它的性能是一个问题。