|
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。