DataInputStream与DataOutputStream
DataInputStream与DataOutputStream是一种装饰模式
DataInputStream
UML图:
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图:
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 错误。 |