首页 > 代码库 > 流之过滤器流(数据流)

流之过滤器流(数据流)

DataInputStream和DataOutputStream类提供了一些方法,可以用二进制格式读/写Java的基本数据类型和字符串。所用的二进制格式主要用于在两个不同的Java程序之间交换数据(可能通过网络连接、数据文件、管道或者其他中间介质)。输出流写入什么数据,输入流就能读取什么数据。不过,这碰巧与大多数交换二进制数的Internet协议所用的格式相同。例如,时间协议使用32位big-endian整数,类似于Java的int数据类型。负载受控的网络元素服务使用32位IEEE754浮点数,类似于Java的float数据类型(这是有关联的,而不只是巧合。Java和大多数网络协议都是由UNIX程序员设计的,因此都会倾向于使用大多数UNIX系统中的常见格式)。然而,这并不适用于所有网络协议,所以请检查你使用的协议的具体细节。例如,网络时间协议(NTP)会把时间表示为64位无符号定点数,前32位是整数部分,后32位是小数部分。这与所有常见编程语言中的基本数据类型都不相同,不过处理起来相当简单。

DataOutputStream类提供了下面11种方法,可以写入特定的Java数据类型:

public final void writeBoolean(boolean b) throws IOException
public final void writeByte(int b) throws IOException
public final void writeShort(int s) throws IOException
public final void writeChar(int c) throws IOException
public final void writeInt(int i) throws IOException
public final void writeLong(long l) throws IOException
public final void writeFloat(float f) throws IOException
public final void writeDouble(double d) throws IOException
public final void writeChars(String s) throws IOException
public final void writeBytes(String s) throws IOException
public final void writeUTF(String s) throws IOException

所有数据都以big-endian格式写入。整数用尽可能少的字节写为2的补码。因此,byte会写为1字节,short写为2字节,int写为4字节,long写为8字节。浮点数和双精度数分别写为4字节和8字节的IEEE754格式。布尔数写为1字节,0表示false。

流之过滤器流(数据流)