简体   繁体   English

DataInputStream/DataOutputStream 类与 InputStream/OutputStream 类的区别

[英]Difference Between DataInputStream/DataOutputStream Class & InputStream/OutputStream Class

Whenever I use HttpConnection Class in Java ME , Android or in BlackBerry , I uses DataInputStream / DataOutputStream class for reading & writing datas over remote server.每当我在Java MEAndroidBlackBerry使用HttpConnection类时,我都会使用DataInputStream / DataOutputStream类通过远程服务器读取和写入数据。 However there are other class like InputStream / OutputStream which can be use for same purpose.但是,还有其他类,如InputStream / OutputStream可用于相同目的。 I saw Question regarding InputStream / OutputStream class with HttpConnection .我用HttpConnection看到了关于InputStream / OutputStream类的问题。 So I would like to know from experts that what are the differences between these two ?所以我想从专家那里知道这两者之间有什么区别?

DataInputStream / DataOutputStream is an InputStream / Outputstream . DataInputStream / DataOutputStreamInputStream / Outputstream InputStream and OutputStream are the most generic IO streams you can use and they are the base class of all streams in Java. InputStreamOutputStream是您可以使用的最通用的 IO 流,它们是 Java 中所有流的基类。 You can read and write raw bytes only with them.您只能使用它们读取和写入原始字节。 DataInputStream writes formatted binary data. DataInputStream写入格式化的二进制数据。 Instead of just simple unformatted bytes, you can read Bytes , Integer , Double , Float , Short , UTF-8 strings, and any mixture of that data.您可以读取BytesIntegerDoubleFloatShort 、 UTF-8 字符串以及这些数据的任何混合,而不只是简单的无格式字节。 And the same can be said for DataOutputStream except that it writes these higher level data types.对于DataOutputStream也可以这样说,除了它写入这些更高级别的数据类型。

A DataInputStream / DataOutputStream has a reference to an InputStream / OutputStream which it reads the raw bytes and interprets those bytes as those previously mentioned data types. DataInputStream / DataOutputStream具有对InputStream / OutputStream的引用,它读取原始字节并将这些字节解释为前面提到的数据类型。

Although reading strings from the DataInputStream isn't a good idea because it makes unchangeable assumptions about the character encoding of the underlying InputStream .尽管从DataInputStream读取字符串不是一个好主意,因为它对底层InputStream的字符编码做出了不可更改的假设。 Instead, it's better to use a Reader which will properly apply character encodings to the underlying byte stream to read data.相反,最好使用Reader将字符编码正确应用于底层字节流以读取数据。 That's why DataInputStream / DataOutputStream is of limited use.这就是DataInputStream / DataOutputStream用途有限的原因。 Typically it's better to trade textual data between processes because it's easiest to make a server and client agree on how to parse the data.通常最好在进程之间交换文本数据,因为最容易让服务器和客户端就如何解析数据达成一致。 Trading binary has lots of bit twiddling that has to occur to make sure each process is talking the same language.交易二进制有很多必须进行的操作,以确保每个过程都使用相同的语言。 It's easy if you have two Java processes using DataInputStream / DataOutputStream , but if you ever want to add a new client that isn't Java you'll have a harder time reusing it.如果您有两个使用DataInputStream / DataOutputStream Java 进程,这很容易,但是如果您想添加一个不是 Java 的新客户端,您将很难重用它。 Not impossible, but just harder.不是不可能,只是更难。

DataOutputStream makes sure the data is formatted in a platform independent way DataOutputStream确保以独立于平台的方式格式化数据

OutputStream only if you transfer raw binary data.只有当你将原始二进制数据的OutputStream。

DataOutputStream -This is the big benefit. DataOutputStream - 这是最大的好处。

There is no significant performance difference between both.两者之间没有显着的性能差异。

DataOutputStream can only handle basic types. DataOutputStream只能处理基本类型。

It can only read/write primtive types and Strings .DataInput/OutputStream performs generally better because its much simpler.它只能读/写原始类型字符串.DataInput/OutputStream 通常表现更好,因为它更简单。

ObjectInput/OutputStream can read/write any object type was well as primitives . ObjectInput/OutputStream可以读/写任何对象类型以及原语 It is less efficient but much easier to use if you want to send complex data.如果您想发送复杂的数据,它的效率较低,但更易于使用。

With the ObjectOutputStream class, instances of a class that implements Serializable can be written to the output stream, and can be read back with ObjectInputStream.使用 ObjectOutputStream 类,可以将实现Serializable的类的实例写入输出流,并且可以使用 ObjectInputStream 读回。

I would assume that the Object*Stream is the best choice until you know that its performance is an issue.我会假设Object*Stream最佳选择,直到您知道它的性能是一个问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在类中使用装饰的OutputStream / InputStream字段 - Using decorated OutputStream/InputStream fields in your class java.io.DataOutputStream类中的writeChar和writeShort方法有什么区别? - What is the difference between the method writeChar and writeShort in java.io.DataOutputStream class? “ DataOutputStream”和“ ObjectOutputStream”之间的区别 - difference between “DataOutputStream” and “ObjectOutputStream” 我可以关闭servlet中的包装输入流或输出流类吗? - Can I close wrapper inputstream or outputstream class in servlet? 使用Android客户端和python服务器在DataOutputStream和DataInputStream之间滞后 - Lag between DataOutputStream and DataInputStream using an android client and python server Java DataOutputStream / DataInputStream OutOfMemoryError - Java DataOutputStream / DataInputStream OutOfMemoryError DataInputStream \\ DataOutputStream的性能 - Performance of DataInputStream\DataOutputStream 在C中等效于DataOutputStream和DataInputStream - Equivalent of DataOutputStream and DataInputStream in C PrintWriter和DataOutputStream有什么区别? - What is the Difference between PrintWriter and DataOutputStream? skipBytes和DataInputStream的skip之间的区别? - Difference between skipBytes and skip of DataInputStream?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM