数据输入流可以使一个应用程序以与机器无关的方式从基本输入流中读取 Java 的基本数据类型。应用程序使用一个数据输出流输出数据,以后可使用一个数据输入流读入。
数据输入流和数据输出流以稍加修订的 UTF-8 格式表示 Unicode 字符串。 (关于更详细信息,请参看 X/Open Company Ltd., “文件系统安全 UCS 转换格式 (FSS_UTF)”, X/Open 初步规范, 文档号:P316。这个信息也出现在 ISO/IEC 10646, Annex P。)
所有在 '\u0001'
到
'\u007F'
之间的字符被表示为一个单字节:
0 | 位 0-7 |
Null 字符 '\u0000'
和从
'\u0080'
到 '\u07FF'
之间的字符被表示为两个字节:
1 | 1 | 0 | 位 6-10 |
1 | 0 | 位 0-5 |
'\u0800'
到
'\uFFFF'
之间的字符被表示为三个字节:
1 | 1 | 1 | 0 | 位 12-15 |
1 | 0 | 位 6-11 | ||
1 | 0 | 位 0-5 |
这种格式与“标准的”UTF-8 格式的区别如下:
'\u0000'
用两个字节而不是一个字节格式编码,所以编码后的字符串永不会包含空字符。
java.lang.Object | +----java.io.InputStream | +----java.io.FilterInputStream | +----java.io.DataInputStream
byte.length
个字节数据读到一个字节数组中。
len
个字节数据读入一个字节数组中。
boolean
值。
double
值。
float
值。
b.length
个字节到该字节数组。
len
个字节到该字节数组中。
n
字节。
public DataInputStream(InputStream in)
public final int read(byte b[]) throws IOException
byte.length
个字节数据读到一个字节数组中。 这个方法将阻塞直到有输入数据可用。
DataInputStream
的read
方法,用三个参数 b
, 0
和 b.length
调用它的基本输入流的具有三个参数的 read
方法, 且将它的返回值返回。
-1
。 public final int read(byte b[], int off, int len) throws IOException
len
个字节数据读入一个字节数组中。 这个方法将阻塞直到有输入数据可用。
DataInputStream
的 read
方法,用相同参数调用它的基本输入流中的 read
方法, 且将此方法的返回值返回。
-1
。 public final void readFully(byte b[]) throws IOException
b.length
个字节到该字节数组。 这个方法将重复从基本流中读取数据,直到读入所有的字节。 该方法将一直阻塞,直到所有的字节数据被读入,或检测到了数据流尾或抛出异常。
public final void readFully(byte b[], int off, int len) throws IOException
len
个字节到该字节数组中。 这个方法将重复从基本流中读取数据,直到读入所有的字节。 该方法将一直阻塞,直到所有的字节数据被读入,或检测到了数据流尾或抛出异常。
public final int skipBytes(int n) throws IOException
n
个字节。该方法将一直阻塞,直到所有的字节数据被跳过,或检测到了数据流尾或抛出异常。
n
。
public final boolean readBoolean() throws IOException
boolean
值。 此方法从基本输入流中读入一个单字节。 0
表示 false
。 任一其它值表示 true
。 该方法将一直阻塞,直到该字节数据被读入,或检测到了数据流尾或抛出异常。
boolean
值。
public final byte readByte() throws IOException
b
, 且
0 <= b <= 255
,
那么结果是:
(byte)(b)
该方法将一直阻塞,直到该字节数据被读入,或检测到了数据流尾或抛出异常。
byte
的下一个字节。
public final int readUnsignedByte() throws IOException
public final short readShort() throws IOException
b1
和
b2
, 均在
0
和 255
之间, 那么结果等于:
(short)((b1 << 8) | b2)
该方法将一直阻塞,直到此两个字节数据被读入,或检测到了数据流尾或抛出异常。
public final int readUnsignedShort() throws IOException
b1
和
b2
, 满足 0 <= b1, b2 <= 255
,
那么结果等于:
(b1 << 8) | b2
该方法将一直阻塞,直到此两个字节数据被读入,或检测到了数据流尾或抛出异常。
public final char readChar() throws IOException
b1
和
b2
, 满足 0 <= b1, b1 <= 255
,
那么结果等于:
(char)((b1 << 8) | b2)
该方法将一直阻塞,直到此两个字节数据被读入,或检测到了数据流尾或抛出异常。
public final int readInt() throws IOException
b1
,
b2
,b3
和 b4
, 满足
0 <= b1, b2,b3,b4 <= 255
,
那么结果等于:
(b1 << 24) | (b2 << 16) + (b3 << 8) +b4
该方法将一直阻塞,直到此四个字节数据被读入,或检测到了数据流尾或抛出异常。
int
。
public final long readLong() throws IOException
b1
, b2
, b3
,
b4
, b5
, b6
,
b7
, 和 b8,
当:
0 <= b1, b2, b3, b4, b5, b6, b7, b8 <= 255,
相应的结果等于:
((long)b1 << 56) + ((long)b2 << 48) + ((long)b3 << 40) + ((long)b4 << 32) + ((long)b5 << 24) + (b6 << 16) + (b7 << 8) + b8
该方法将一直阻塞,直到此八个字节数据被读入,或检测到了数据流尾或抛出异常。
long
。
public final float readFloat() throws IOException
float
值。 这个方法与
readInt
方法一样读取一个 int
值,然后使用类
Float
中 intBitsToFloat
方法将这个
int
转换为一个 float
值。
该方法将一直阻塞,直到此四个字节数据被读入,或检测到了数据流尾或抛出异常。
float
。
public final double readDouble() throws IOException
double
值。 这个方法同
readLong
方法一样读取一个
long
值,然后使用类
Double
中的 longBitsToDouble
方法将这个 long
转换为一个 double
。
该方法将一直阻塞,直到此八个字节数据被读入,或检测到了数据流尾或抛出异常。
double
。
public final String readLine() throws IOException
BufferedReader.readLine()
方法。 使用类
DataInputStream
读取行的程序,能转换为使用
类 BufferedReader
的代码,通过置换以下代码
DataInputStream d = new DataInputStream(in);
BufferedReader d
= new BufferedReader(new InputStreamReader(in));
一个文本行结束于一个回车符('\r'
), 一个换行符
('\n'
), 一个回车符紧跟一个换行符或输入流的末尾。 如果有行结束符,则它将作为返回串的一部分。
该方法将一直阻塞,直到读取了一个换行符、一个回车符、或紧跟回车符的换行符,或检测到了数据流尾或抛出异常。
public final String readUTF() throws IOException
readUTF(this)
。关于此格式的更完整描述请参见 readUTF(java.io.DataInput)
。
该方法将一直阻塞,直到所有的字节数据被读入,或检测到了数据流尾或抛出异常。
public static final String readUTF(DataInput in) throws IOException
前两个字节以同 readUnsignedShort
方法一样的机制被读入。这个值给出了编码字符串中剩余的字节数(注:不是结果字符串的长度)。然后剩余的字节被看作是已用 UTF-8 格式编码的字符,并且被转换为字符。
该方法将一直阻塞,直到所有的字节数据被读入,或检测到了数据流尾或抛出异常。