DataInputStream与DataOutputStream

DataInputStream与DataOutputStream是一种装饰模式

DataInputStream
UML图:
DataInputStream与DataOutputStream

DataInput 接口Api

DataInput 接口用于从二进制流中读取字节,并根据所有 Java 基本类型数据进行重构。同时还提供根据 UTF-8 修改版格式的数据重构 String 的工具。

对于此接口中的所有数据读取例程来说,如果在读取所需字节数之前已经到达文件末尾 (end of file),则将抛出 EOFException(IOException 的一种)。如果因为到达文件末尾以外的其他原因无法读取字节,则将抛出 IOException 而不是 EOFException。尤其是,在输入流已关闭的情况下,将抛出 IOException。

字段摘要
从类 java.io.FilterInputStream 继承的字段    in


方法摘要
返回类型 方法名 描述
boolean readBoolean() 读取一个输入字节,如果该字节不是零,则返回 true,如果是零,则返回 false。
byte readByte() 读取并返回一个输入字节。
char readChar() 读取两个输入字节并返回一个 char 值。
double readDouble() 读取八个输入字节并返回一个 double 值。
float readFloat() 读取四个输入字节并返回一个 float 值。
void readFully(byte[] b) 从输入流中读取一些字节,并将它们存储在缓冲区数组 b 中。
void readFully(byte[] b, int off, int len) 从输入流中读取 len 个字节。
int readInt() 读取四个输入字节并返回一个 int 值。
String readLine() 已过时。读取文本行的首选方法是使用 BufferedReader.readLine() 方法。
long readLong() 读取八个输入字节并返回一个 long 值。
short readShort() 读取两个输入字节并返回一个 short 值。
int readUnsignedByte() 读取一个输入字节,将它左侧补零 (zero-extend) 转变为 int 类型,并返回结果,所以结果的范围是 0 到 255。
int readUnsignedShort() 读取两个输入字节,并返回 0 到 65535 范围内的一个 int 值。
String readUTF() 读入一个已使用 UTF-8 修改版格式编码的字符串。
int skipBytes(int n) 试图在输入流中跳过数据的 n 个字节,并丢弃跳过的字节。


方法详细信息
readFully

void readFully(byte[] b)
                throws IOException

从输入流中读取一些字节,并将它们存储在缓冲区数组 b 中。读取的字节数等于 b 的长度。
在出现以下条件之一以前,此方法将一直阻塞:
            输入数据的 len 个字节是可用的,在这种情况下,正常返回。
            检测到文件末尾,在这种情况下,抛出 EOFException。
            如果发生 I/O 错误,在这种情况下,将抛出 IOException,而不是 EOFException。

如果 b 为 null,则抛出 NullPointerException。如果 b.length 为零,则不读取字节。否则,将读取的第一个字节存储到元素 b[0] 中,下一个字节存储到 b[1] 中,依此类推。如果此方法抛出异常,则可能是因为已经用输入流中的数据更新了 b 的某些(但非全部)字节。

参数:

            b - 存储读取数据的缓冲区。

抛出:
            EOFException - 如果此流在读取所有字节之前到达末尾。
            IOException - 如果发生 I/O 错误。。
readFully

void readFully(byte[] b,int off,int len)
                throws IOException

从输入流中读取 len 个字节。
在出现以下条件之一以前,此方法将一直阻塞:
            输入数据的 len 个字节是可用的,在这种情况下,正常返回。
            检测到文件末尾,在这种情况下,抛出 EOFException。
            如果发生 I/O 错误,在这种情况下,将抛出 IOException,而不是 EOFException。

如果 b 为 null,则抛出 NullPointerException。如果 off 为负,或 len 为负,或者 off+len 大于数组 b 的长度,则抛出 IndexOutOfBoundsException。如果 len 为零,则不读取字节。否则,将读取的第一个字节存储到元素 b[off] 中,下一个字节存储到 b[off+1] 中,依此类推。读取的字节数至多等于 b[0]。

参数:

            b - 存储读取数据的缓冲区。
            off - 指定数据中的偏移量的 int 值。
            len - 指定读取的字节数的 int 值。

抛出:
            EOFException - 如果此流在读取所有字节之前到达末尾。
            IOException - 如果发生 I/O 错误。。
readLong

long readLong()
                throws IOException
         读取八个输入字节并返回一个 long 值。

         此方法适用于读取用接口 DataOutput 的 writeLong 方法写入的字节。

         返回:读取的 long 值。

         抛出:
                    EOFException - 如果此流在读取所有字节之前到达末尾。
                    IOException - 如果发生 I/O 错误。
readUTF

String readUTF()
                throws IOException
         读入一个已使用 UTF-8 修改版格式编码的字符串。 readUTF 的常规协定是:该方法读取使用 UTF-8 修改版格式编码的 Unicode 字符串的表示形式;然后以 String 的形式返回此字符串。

         可以使用 DataOutput 接口的 writeUTF 方法写入适合此方法读取的数据。

         返回:一个 Unicode 字符串。

         抛出:
                    EOFException - 如果此流在读取所有字节之前到达末尾。
                    IOException - 如果发生 I/O 错误。
                    UTFDataFormatException - 如果这些字节不表示一个有效的、UTF-8 修改版编码的字符串。



DataOutputStream
UML图:
DataInputStream与DataOutputStream

DataOutput接口Api


DataOutput 接口用于将数据从任意 Java 基本类型转换为一系列字节,并将这些字节写入二进制流。同时还提供了一个将 String 转换成 UTF-8 修改版格式并写入所得到的系列字节的工具。


对于此接口中写入字节的所有方法,如果由于某种原因无法写入某个字节,则抛出 IOException。

字段摘要
字段类型 字段名 字段描述
protected int written 到目前为止写入数据输出流的字节数。


从类 java.io.FilterOutputStream 继承的字段   out


构造方法摘要
方法名称 描述
DataOutputStream(OutputStream out) 创建一个新的数据输出流,将数据写入指定基础输出流。


方法摘要
返回类型 方法名称 描述
void flush() 清空此数据输出流。
int size() 返回计数器 written 的当前值,即到目前为止写入此数据输出流的字节数。
void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入基础输出流。
void write(int b) 将指定字节(参数 b 的八个低位)写入基础输出流。
void writeBoolean(boolean v) 将一个 boolean 值以 1-byte 值形式写入基础输出流。
void writeByte(int v) 将一个 byte 值以 1-byte 值形式写出到基础输出流中。
void writeBytes(String s) 将字符串按字节顺序写出到基础输出流中
void writeChar(int v) 将一个 char 值以 2-byte 值形式写入基础输出流中,先写入高字节。
void writeChars(String s) 将字符串按字符顺序写入基础输出流。
void writeDouble(double v) 使用 Double 类中的 doubleToLongBits 方法将 double 参数转换为一个 long 值,然后将该 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。
void writeFloat(float v) 使用 Float 类中的 floatToIntBits 方法将 float 参数转换为一个 int 值,然后将该 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。
void writeInt(int v) 将一个 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。
void writeLong(long v) 将一个 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。
void writeShort(int v) 将一个 short 值以 2-byte 值形式写入基础输出流中,先写入高字节。
void writeUTF(String str) 以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。


方法摘要
writeBoolean
void writeBoolean(boolean v)
                throws IOException

将一个 boolean 值写入输出流。如果参数 v 为 true,则写入值 (byte)1;如果 v 为 false,则写入值 (byte)0。此方法写入的字节可由 DataInput 接口的 readBoolean 方法读取,然后该方法将返回一个等于 v 的 boolean 值

参数:v - 要写入的 boolean 值。

抛出:IOException - 如果发生 I/O 错误。
writeInt
void writeInt(int v)
                throws IOException

将一个 int 值写入输出流,该值由四个字节组成。此方法写入的字节可由 DataInput 接口的 readInt 方法读取,然后该方法将返回一个等于 v 的 int 值。

参数:v - 要写入的 int 值。

抛出:IOException - 如果发生 I/O 错误。
writeLong
void writeLong(long v)
                throws IOException

将一个 long 值写入输出流,该值由八个字节组成。此方法写入的字节可由 DataInput 接口的 readLong 方法读取,然后该方法将返回一个等于 v 的 long 值

参数:v - 要写入的 long 值。

抛出:IOException - 如果发生 I/O 错误。
writeUTF
void writeUTF(String s)
                throws IOException

将表示长度信息的两个字节写入输出流,后跟字符串 s 中每个字符的 UTF-8 修改版表示形式。如果 s 为 null,则抛出 NullPointerException。根据字符的值,将字符串 s 中每个字符转换成一个字节、两个字节或三个字节的字节组。此方法写入的字节可由 DataInput 接口的 readUTF 方法读取,然后该方法将返回一个等于 s 的 String 值

参数:s - 要写入的字符串值。

抛出:IOException - 如果发生 I/O 错误。