[英]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 ME
、 Android
或BlackBerry
使用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
/ DataOutputStream
是InputStream
/ Outputstream
。 InputStream
and OutputStream
are the most generic IO streams you can use and they are the base class of all streams in Java. InputStream
和OutputStream
是您可以使用的最通用的 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.您可以读取
Bytes
、 Integer
、 Double
、 Float
、 Short
、 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.