|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface DataInput
DataInput
介面用於從二進制串流中讀取位元組,並根據所有 Java 基本型別資料進行重構。同時還提供根據 UTF-8 修改版格式的資料重構 String
的工具。
對於此介面中的所有資料讀取例程來說,如果在讀取所需位元組數之前已經到達檔案末尾 (end of file),則將拋出 EOFException
(IOException
的一種)。如果因為到達檔案末尾以外的其他原因無法讀取位元組,則將拋出 IOException
而不是 EOFException
。尤其是,在輸入串流已關閉的情況下,將拋出 IOException
。
DataInput 和 DataOutput 介面的實作表示稍作改版的 UTF-8 格式的 Unicode 字元串。(關於標準 UTF-8 格式的資訊,請參閱 The Unicode Standard, Version 4.0 的 3.9 Unicode Encoding Forms 節)。注意,在下表中,最高有效位顯示在最左邊的列中。
'\u0001'
到 '\u007F'
範圍內的所有字元都是用單個位元組表示的:
位值 位元組 1
0 位 6-0
null 字元 '\u0000'
以及從 '\u0080'
到 '\u07FF'
的範圍內的字元用兩個位元組表示:
位值 位元組 1
1 1 0 位 10-6 位元組 2
1 0 位 5-0
'\u0800'
到 '\uFFFF'
範圍內的 char
值用三個位元組表示:
位值 位元組 1
1 1 1 0 位 15-12 位元組 2
1 0 位 11-6 位元組 3
1 0 位 5-0
這種格式與標準 UTF-8 格式之間的不同如下:
'\u0000'
是用 2-byte 格式而不是 1-byte 格式編碼的,因此已編碼的字元串中決不會有嵌入的 null。
DataInputStream
,
DataOutput
方法摘要 | |
---|---|
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()
從輸入串流中讀取下一文本行。 |
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 個位元組,並丟棄跳過的位元組。 |
方法詳細資訊 |
---|
void readFully(byte[] b) throws IOException
b
中。讀取的位元組數等於 b
的長度。
在出現以下條件之一以前,此方法將一直阻塞:
b.length
個位元組是可用的,在這種情況下,正常返回。
EOFException
。
IOException
,而不是 EOFException
。
如果 b
為 null
,則拋出 NullPointerException
。如果 b.length
為零,則不讀取位元組。否則,將讀取的第一個位元組存儲到元素 b[0]
中,下一個位元組存儲到 b[1]
中,依此類別推。如果此方法拋出異常,則可能是因為已經用輸入串流中的資料更新了 b
的某些(但非全部)位元組。
b
- 存儲讀取資料的緩衝區。
EOFException
- 如果此串流在讀取所有位元組之前到達末尾。
IOException
- 如果發生 I/O 錯誤。void readFully(byte[] b, int off, int len) throws IOException
len
個位元組。
在出現以下條件之一以前,此方法將一直阻塞:
len
個位元組是可用的,在這種情況下,正常返回。
EOFException
。
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 錯誤。int skipBytes(int n) throws IOException
n
個位元組,並丟棄跳過的位元組。不過,可以跳過更少的位元組數,該位元組數甚至可以為零。這可能由很多情況引起;在已經跳過 n
個位元組前到達檔案末尾只是其中的一種可能。此方法從不拋出 EOFException
。返回實際跳過的位元組數。
n
- 要跳過的位元組數。
IOException
- 如果發生 I/O 錯誤。boolean readBoolean() throws IOException
true
,如果是零,則返回 false
。此方法適用於讀取用介面 DataOutput
的 writeBoolean
方法寫入的位元組。
boolean
值。
EOFException
- 如果此串流在讀取所有位元組之前到達末尾。
IOException
- 如果發生 I/O 錯誤。byte readByte() throws IOException
-128
到 127
(包含)範圍內的一個有符號值。此方法適用於讀取用介面 DataOutput
的 writeByte
方法寫入的位元組。
EOFException
- 如果此串流在讀取所有位元組之前到達末尾。
IOException
- 如果發生 I/O 錯誤。int readUnsignedByte() throws IOException
int
型別,並返回結果,所以結果的範圍是 0
到 255
。如果介面 DataOutput
的 writeByte
方法的參數是 0
到 255
之間的值,則此方法適用於讀取用 writeByte
寫入的位元組。
EOFException
- 如果此串流在讀取所有位元組之前到達末尾。
IOException
- 如果發生 I/O 錯誤。short readShort() throws IOException
short
值。設 a
為第一個讀取位元組,b
為第二個讀取位元組。返回的值是:
(short)((a << 8) | (b & 0xff))
此方法適用於讀取用介面 DataOutput
的 writeShort
方法寫入的位元組。
EOFException
- 如果此串流在讀取所有位元組之前到達末尾。
IOException
- 如果發生 I/O 錯誤。int readUnsignedShort() throws IOException
0
到 65535
範圍內的一個 int
值。設 a
為第一個讀取位元組,b
為第二個讀取位元組。返回的值是:
(((a & 0xff) << 8) | (b & 0xff))
如果介面 DataOutput
的 writeShort
方法的參數是 0
到 65535
範圍內的值,則此方法適用於讀取用 writeShort
寫入的位元組。
EOFException
- 如果此串流在讀取所有位元組之前到達末尾。
IOException
- 如果發生 I/O 錯誤。char readChar() throws IOException
char
值。設 a
為第一個讀取位元組,b
為第二個讀取位元組。返回的值是:
(char)((a << 8) | (b & 0xff))
此方法適用於讀取用介面 DataOutput
的 writeChar
方法寫入的位元組。
char
值。
EOFException
- 如果此串流在讀取所有位元組之前到達末尾。
IOException
- 如果發生 I/O 錯誤。int readInt() throws IOException
int
值。設 a-d
為四個讀取位元組中的第一個位元組。返回的值是:
(((a & 0xff) << 24) | ((b & 0xff) << 16) |
((c & 0xff) << 8) | (d & 0xff))
此方法適用於讀取用介面 DataOutput
的 writeInt
方法寫入的位元組。
int
值。
EOFException
- 如果此串流在讀取所有位元組之前到達末尾。
IOException
- 如果發生 I/O 錯誤。long readLong() throws IOException
long
值。設 a-h
為八個讀取位元組中的第一個位元組。返回的值是:
(((long)(a & 0xff) << 56) |
((long)(b & 0xff) << 48) |
((long)(c & 0xff) << 40) |
((long)(d & 0xff) << 32) |
((long)(e & 0xff) << 24) |
((long)(f & 0xff) << 16) |
((long)(g & 0xff) << 8) |
((long)(h & 0xff)))
此方法適用於讀取用介面 DataOutput
的 writeLong
方法寫入的位元組。
long
值。
EOFException
- 如果此串流在讀取所有位元組之前到達末尾。
IOException
- 如果發生 I/O 錯誤。float readFloat() throws IOException
float
值。實作這一點的方法是:先使用與 readInt
方法完全相同的方式建構一個 int
值,然後使用與 Float.intBitsToFloat
方法完全相同的方式將此 int
值轉換成一個 float
值。此方法適用於讀取用介面 DataOutput
的 writeFloat
方法寫入的位元組。
float
值。
EOFException
- 如果此串流在讀取所有位元組之前到達末尾。
IOException
- 如果發生 I/O 錯誤。double readDouble() throws IOException
double
值。實作這一點的方法是:先使用與 readlong
方法完全相同的方式建構一個 long
值,然後使用與 Double.longBitsToDouble
方法完全相同的方式將此 long
值轉換成一個 double
值。此方法適用於讀取用介面 DataOutput
的 writeDouble
方法寫入的位元組。
double
值。
EOFException
- 如果此串流在讀取所有位元組之前到達末尾。
IOException
- 如果發生 I/O 錯誤。String readLine() throws IOException
String
形式返回讀取的字元。注意,因為此方法用於處理字元,所以它不支持整個 Unicode 字元集的輸入。
如果在一個位元組都沒有讀取的時候就到達檔案末尾,則返回 null
。否則,通過左側補零將讀取的每個位元組轉換成 char
型別的值。如果遇到字元 '\n'
,則丟棄它並且停止讀取。如果遇到字元 '\r'
則丟棄它,如果後續位元組轉變成字元 '\n'
,則同樣丟棄它並停止讀取。如果在遇到字元 '\n'
和 '\r'
之一前到達檔案末尾,則停止讀取。一旦已停止讀取,則返回一個 String
,它按順序包含所有已讀取且未丟棄的字元。注意,此字元串中的每個字元的值都將小於 \u0100
(即 (char)256
)的值。
null
。
IOException
- 如果發生 I/O 錯誤。String readUTF() throws IOException
readUTF
的常規協定是:該方法讀取使用 UTF-8 修改版格式編碼的 Unicode 字元串的表示形式;然後以 String
的形式返回此字元串。
首先讀取兩個位元組,並使用它們建構一個無符號 16 位整數,建構方式與 readUnsignedShort
方法的方式完全相同。該整數值被稱為 UTF 長度,它指定要讀取的額外位元組數。然後成組地將這些位元組轉換為字元。每組的長度根據該組第一個位元組的值計算。緊跟在某個組後面的位元組(如果有)是下一組的第一個位元組。
如果組的第一個位元組與位網要 0xxxxxxx
(其中 x
表示“可能為 0
或 1
”)比對,則該組只有這一個位元組。該位元組被左側補零,轉換成一個字元。
如果組的第一個位元組與位網要 110xxxxx
比對,則該組只由位元組 a
和另一個位元組 b
組成。如果沒有位元組 b
(因為位元組 a
是要讀取的最後一個位元組),或者位元組 b
與位網要 10xxxxxx
不比對,則拋出 UTFDataFormatException
。否則,將該組轉換成字元:
(char)(((a& 0x1F) << 6) | (b & 0x3F))
如果組的第一個位元組與位網要 1110xxxx
比對,則該組由位元組 a
和另外兩個位元組 b
和 c
組成。如果沒有位元組 c
(因為位元組 a
是要讀取的最後兩個位元組之一),或者位元組 b
或位元組 c
與位網要 10xxxxxx
不比對,則拋出 UTFDataFormatException
。否則,將該組轉換成字元:
(char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))
如果組的第一個位元組與網要 1111xxxx
或網要 10xxxxxx
比對,則拋出 UTFDataFormatException
。
如果在執行整個過程中的任意時間到達檔案末尾,則拋出 EOFException
。
在通過此過程將每個組轉換成字元後,按照從輸入串流中讀取相應組的順序,將這些字元收集在一起,形成一個 String
,然後該字元串將被返回。
可以使用 DataOutput
介面的 writeUTF
方法寫入適合此方法讀取的資料。
EOFException
- 如果此串流在讀取所有位元組之前到達末尾。
IOException
- 如果發生 I/O 錯誤。
UTFDataFormatException
- 如果這些位元組不表示一個有效的、UTF-8 修改版編碼的字元串。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。