【问题标题】:Difference Between DataInputStream/DataOutputStream Class & InputStream/OutputStream ClassDataInputStream/DataOutputStream 类和 InputStream/OutputStream 类的区别
【发布时间】:2012-02-13 19:50:55
【问题描述】:

每当我在Java MEAndroidBlackBerry 中使用HttpConnection 类时,我都会使用DataInputStream/DataOutputStream 类在远程服务器上读取和写入数据。但是还有其他类,如 InputStream/OutputStream 可以用于相同目的。我看到关于InputStream/OutputStream 类的问题HttpConnection。所以我想从专家那里知道这两者之间有什么区别?

【问题讨论】:

标签: java android java-me datainputstream


【解决方案1】:

DataInputStream/DataOutputStream 是一个InputStream/OutputstreamInputStreamOutputStream 是您可以使用的最通用的 IO 流,它们是 Java 中所有流的基类。您只能使用它们读取和写入原始字节。 DataInputStream 写入格式化的二进制数据。您可以读取BytesIntegerDoubleFloatShort、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-这是最大的好处。

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

      【讨论】:

        猜你喜欢
        • 2012-04-06
        • 2013-03-12
        • 2013-09-03
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-09
        • 2018-02-25
        相关资源
        最近更新 更多