【问题标题】:Difference Between DataInputStream/DataOutputStream Class & InputStream/OutputStream ClassDataInputStream/DataOutputStream 类和 InputStream/OutputStream 类的区别
【发布时间】:2012-02-13 19:50:55
【问题描述】:
每当我在Java ME、Android 或BlackBerry 中使用HttpConnection 类时,我都会使用DataInputStream/DataOutputStream 类在远程服务器上读取和写入数据。但是还有其他类,如 InputStream/OutputStream 可以用于相同目的。我看到关于InputStream/OutputStream 类的问题HttpConnection。所以我想从专家那里知道这两者之间有什么区别?
【问题讨论】:
标签:
java
android
java-me
datainputstream
【解决方案1】:
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 的新客户端,那么重用它会很困难。并非不可能,只是更难。
【解决方案2】:
DataOutputStream只能处理基本类型。
它只能读取/写入原始类型和字符串。DataInput/OutputStream 通常表现更好,因为它更简单。
ObjectInput/OutputStream 可以读/写任何对象类型 以及原语。如果您想发送复杂的数据,它的效率较低,但更易于使用。
使用 ObjectOutputStream 类,实现Serializable 的类的实例可以写入输出流,并且可以使用 ObjectInputStream 读回。
我会假设 Object*Stream 是最佳选择,直到您知道它的性能是一个问题。
【解决方案3】:
DataOutputStream 确保数据以独立于平台的方式格式化
OutputStream 仅在您传输原始二进制数据时。
DataOutputStream-这是最大的好处。
两者之间没有显着的性能差异。