一:DataOutput 接口
1.接口的简介
DataOutput
接口用于将数据从任意 Java 基本类型转换为一系列字节,并将这些字节写入二进制流(OutputStream)。同时还提供了一个将String
转换成 UTF-8修改版 格式并写入所得到的系列字节的工具。
对于此接口中写入字节的所有方法,如果由于某种原因无法写入某个字节,则抛出 IOException
。
2.实现该接口的类
DataOutputStream 类 ,RandomAccessFile类
3.接口定义的方法
总结:
所有的方法都是向向输出流中写入 -128~127 间的数字。
1) writeBoolean ( Boolean v )
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 错误。
2) writeByte ( byte v )
writeByte void writeByte (int v)
throws IOException
将参数
v
的八个低位写入输出流。忽略
v
的 24 个高位。(这意味着
writeByte
的作用与使用整数做参数的
write
完全相同。)此方法写入的字节可由
DataInput
接口的
readByte
方法读取,然后该方法将返回一个等于
(byte)v
的
byte
值。
参数:
v
- 要写入的字节值。
抛出:
IOException
- 如果发生 I/O 错误。
3) writeShort (short v )
writeShort void writeShort (int v)
throws IOException
将两个字节写入输出流,用它们表示参数值。要写入的字节值(按顺序显示)是:
(byte)(0xff & (v >> 8))
(byte)(0xff & v)
此方法写入的字节可由 DataInput
接口的 readShort
方法读取,然后该方法将返回一个等于(short)v
的short
值。
参数:
v
- 要写入的
short
值。
抛出:
IOException
- 如果发生 I/O 错误。
4) writeInt ( int v )
void writeInt (int v)
throws IOException
将一个
int
值写入输出流,该值由四个字节组成。要写入的字节值(按顺序显示)是:
(byte)(0xff & (v >> 24))
(byte)(0xff & (v >> 16))
(byte)(0xff & (v >> 8))
(byte)(0xff & v)
此方法写入的字节可由 DataInput
接口的 readInt
方法读取,然后该方法将返回一个等于 v
的 int
值。
参数:
v
- 要写入的
int
值。
抛出:
IOException
- 如果发生 I/O 错误。
5) writeLong ( long v )
void writeLong (long v)
throws IOException
将一个
long
值写入输出流,该值由八个字节组成。要写入的字节值(按顺序显示)是:
(byte)(0xff & (v >> 56))
(byte)(0xff & (v >> 48))
(byte)(0xff & (v >> 40))
(byte)(0xff & (v >> 32))
(byte)(0xff & (v >> 24))
(byte)(0xff & (v >> 16))
(byte)(0xff & (v >> 8))
(byte)(0xff & v)
此方法写入的字节可由 DataInput
接口的 readLong
方法读取,然后该方法将返回一个等于 v
的 long
值。
参数:
v
- 要写入的
long
值。
抛出:
IOException
- 如果发生 I/O 错误。
6) writeFloat ( float v )
writeFloat void writeFloat (float v)
throws IOException
将一个
float
值写入输出流,该值由四个字节组成。实现这一点的方式是:首先使用与
Float.floatToIntBits
方法完全相同的方式将此
float
值转换为一个
int
值,然后使用与
writeInt
方法完全相同的方式写入该
int
值。此方法写入的字节可由
DataInput
接口的
readFloat
方法读取,然后该方法将返回一个等于
v
的
float
值。
参数:
v
- 要写入的
float
值。
抛出:
IOException
- 如果发生 I/O 错误。
7) writeDouble ( double v )
writeDouble void writeDouble (double v)
throws IOException
将一个
double
值写入输出流,该值由八个字节组成。实现这一点的方式是:首先使用与
Double.doubleToLongBits
方法相同的方式将此
double
值转换为一个
long
值,然后使用与
writeLong
方法完全相同的方式写入该
long
值。此方法写入的字节可由
DataInput
接口的
readDouble
方法读取,然后该方法将返回一个等于
v
的
double
值。
参数:
v
- 要写入的
double
值。
抛出:
IOException
- 如果发生 I/O 错误。
8) writeChar ( char v )
writeChar void writeChar (int v)
throws IOException
将一个
char
值写入输出流,该值由两个字节组成。要写入的字节值(按顺序显示)是:
(byte)(0xff & (v >> 8))
(byte)(0xff & v)
此方法写入的字节可由 DataInput
接口的 readChar
方法读取,然后该方法将返回一个等于 (char)v
的 char
值。
参数:
v
- 要写入的
char
值。
抛出:
IOException
- 如果发生 I/O 错误。
9) writeChars ( String s )
writeChars void writeChars (String s)
throws IOException
将字符串
s
中的所有字符按顺序写入输出流,每个字符用两个字节表示。如果
s
为
null
,则抛出
NullPointerException
。如果
s.length
为零,则不写入字符。否则,首先写入字符
s[0]
,然后写入字符
s[1]
,依此类推;最后一个写入字符是
s[s.length-1]
。使用与
writeChar
方法完全相同的方法为每个字符实际写入两个字节,先使用高位字节。
参数:
s
- 要写入的字符串值。
抛出:
IOException
- 如果发生 I/O 错误。
10) writeBytes( String s )
writeBytes void writeBytes (String s)
throws IOException
将一个字符串写入输出流。字符串
s
中的每一个字符被依次写入输出流,每个字符用一个字节表示。如果
s
为
null
,则抛出
NullPointerException
。
如果 s.length
为零,则不写入字节。否则,首先写入字符 s[0]
,然后写入字符 s[1]
,依此类推;最后一个写入字符是s[s.length-1]
。使用与writeByte
方法完全相同的方法为每个字符写入一个低位字节。忽略字符串中每个字符的八个高位。
参数:
s
- 要写入的字节字符串。
抛出:
IOException
- 如果发生 I/O 错误。
10) writeUTF ( String s )
writeUTF void writeUTF (String s)
throws IOException
将表示长度信息的两个字节写入输出流,后跟字符串
s
中每个字符的
UTF-8 修改版 表示形式。如果
s
为
null
,则抛出
NullPointerException
。根据字符的值,将字符串
s
中每个字符转换成一个字节、两个字节或三个字节的字节组。
如果字符 c
在 \u0001
到 \u007f
的范围内,则用一个字节表示:
(byte)c
如果字符 c
是 \u0000
或者它在 \u0080
到 \u07ff
的范围内,则用两个字节表示,写入顺序如下:
(byte)(0xc0 | (0x1f & (c >> 6)))
(byte)(0x80 | (0x3f & c))
如果字符 c
在 \u0800
到 \uffff
的范围内,则用三个字节表示,写入顺序如下:
(byte)(0xe0 | (0x0f & (c >> 12)))
(byte)(0x80 | (0x3f & (c >> 6)))
(byte)(0x80 | (0x3f & c))
首先,要计算表示 s
中所有字符所需的字节总数。如果总数大于 65535
,则抛出 UTFDataFormatException
。否则,使用与writeShort
方法完全相同的方式将此长度写入输出流,然后写入字符串s
中所有字符的 1 字节、2 字节或 3 字节表示形式。
此方法写入的字节可由 DataInput
接口的 readUTF
方法读取,然后该方法将返回一个等于 s
的 String
值。
参数:
s
- 要写入的字符串值。
抛出:
IOException
- 如果发生 I/O 错误。
11) write ( byte[] b )
write void write (byte[] b)
throws IOException
将数组
b
中的所有字节写入输出流。如果
b
为
null
,则抛出
NullPointerException
。如果
b.length
为零,则不写入字节。否则,首先写入字节
b[0]
,然后写入字节
b[1]
,依此类推;最后一个写入字节是
b[b.length-1]
。
参数:
b
- 数据。
抛出:
IOException
- 如果发生 I/O 错误。
12) write ( byte[] b , int off , int len )
write void write (byte[] b,
int off,
int len)
throws IOException
将数组
b
中的
len
个字节按顺序写入输出流。如果
b
为
null
,则抛出
NullPointerException
。如果
off
为负,或
len
为负,抑或
off+len
大于数组
b
的长度,则抛出
IndexOutOfBoundsException
。如果
len
为零,则不写入字节。否则,首先写入字节
b[off]
,然后写入字节
b[off+1]
,依此类推;最后一个写入字节是
b[off+len-1]
。
参数:
b
- 数据。
off
- 数据中的起始偏移量。
len
- 要写入的字节数。
抛出:
IOException
- 如果发生 I/O 错误。
13) write ( int b )
void write (int b)
throws IOException
将参数 b
的八个低位写入输出流。忽略 b
的 24 个高位。
参数:
b
- 要写入的字节。
抛出:
IOException
- 如果发生 I/O 错误。
思考:可以使用数据输入流的readByte()方法来获取这个值。