W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
public interface DataInput
DataInput 接口提供從二進制流中讀取字節(jié)并從中重建任何 Java 原始類型的數(shù)據(jù)。 還有一種工具可以從修改后的 UTF-8 格式的數(shù)據(jù)中重建字符串。
對于該接口中的所有讀取例程,通常情況下,如果在讀取所需字節(jié)數(shù)之前到達文件末尾,則會拋出 EOFException(這是一種 IOException)。 如果由于文件結尾以外的任何原因無法讀取任何字節(jié),則拋出除 EOFException 之外的 IOException。 特別是,如果輸入流已關閉,則可能會引發(fā) IOException。
修改后的 UTF-8
DataInput 和 DataOutput 接口的實現(xiàn)以對 UTF-8 稍作修改的格式表示 Unicode 字符串。 (有關標準 UTF-8 格式的信息,請參閱 Unicode 標準版本 4.0 的第 3.9 節(jié) Unicode 編碼形式)。 請注意,在下表中,最高有效位出現(xiàn)在最左側的列中。
此格式與標準 UTF-8 格式的區(qū)別如下:
Since:
JDK1.0
修飾符和類型 | 方法 | 描述 |
---|---|---|
boolean | readBoolean() | 讀取一個輸入字節(jié),如果該字節(jié)非零則返回 true,如果該字節(jié)為零則返回 false。 |
byte | readByte() | 讀取并返回一個輸入字節(jié)。 |
char | readChar() | 讀取兩個輸入字節(jié)并返回一個 char 值。 |
double | readDouble() | 讀取八個輸入字節(jié)并返回一個雙精度值。 |
float | readFloat() | 讀取四個輸入字節(jié)并返回一個浮點值。 |
void | readFully(byte[] b) | 從輸入流中讀取一些字節(jié)并將它們存儲到緩沖區(qū)數(shù)組中 b。 |
void | readFully(byte[] b, int off, int len) | 從輸入流中讀取 len 個字節(jié)。 |
int | readInt() | 讀取四個輸入字節(jié)并返回一個 int 值。 |
String | readLine() | 從輸入流中讀取下一行文本。 |
long | readLong() | 讀取八個輸入字節(jié)并返回一個 long 值。 |
short | readShort() | 讀取兩個輸入字節(jié)并返回一個短值。 |
int | readUnsignedByte() | 讀取一個輸入字節(jié),將其零擴展為 int 類型,并返回結果,因此該結果在 0 到 255 的范圍內(nèi)。 |
int | readUnsignedShort() | 讀取兩個輸入字節(jié)并返回 0 到 65535 范圍內(nèi)的 int 值。 |
String | readUTF() | 讀取使用修改后的 UTF-8 格式編碼的字符串。 |
int | skipBytes(int n) | 嘗試從輸入流中跳過 n 個字節(jié)的數(shù)據(jù),丟棄跳過的字節(jié)。 |
void readFully(byte[] b) throws IOException
從輸入流中讀取一些字節(jié)并將它們存儲到緩沖區(qū)數(shù)組中 b。 讀取的字節(jié)數(shù)等于 b 的長度。
此方法會阻塞,直到發(fā)生以下情況之一:
如果 b 為 null,則拋出 NullPointerException。 如果 b.length 為零,則不讀取任何字節(jié)。 否則,讀取的第一個字節(jié)存儲到元素 b[0] 中,下一個字節(jié)存儲到 b[1] 中,依此類推。 如果此方法引發(fā)異常,則可能是 b 的某些但不是所有字節(jié)已使用來自輸入流的數(shù)據(jù)進行了更新。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
b | 讀取數(shù)據(jù)的緩沖區(qū)。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
EOFException | 如果此流在讀取所有字節(jié)之前到達末尾。 |
IOException | 如果發(fā)生 I/O 錯誤。 |
void readFully(byte[] b, int off, int len) throws IOException
從輸入流中讀取 len 個字節(jié)。
此方法會阻塞,直到發(fā)生以下情況之一:
如果 b 為 null,則拋出 NullPointerException。 如果 off 為負數(shù),或 len 為負數(shù),或 off+len 大于數(shù)組 b 的長度,則拋出 IndexOutOfBoundsException。 如果 len 為零,則不讀取任何字節(jié)。 否則,讀取的第一個字節(jié)存儲到元素 b[off] 中,下一個字節(jié)存儲到 b[off+1] 中,依此類推。 讀取的字節(jié)數(shù)最多等于 len。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
b | 讀取數(shù)據(jù)的緩沖區(qū)。 |
off | 一個 int,指定數(shù)據(jù)的偏移量。 |
len | 一個 int 指定要讀取的字節(jié)數(shù)。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
EOFException | 如果此流在讀取所有字節(jié)之前到達末尾。 |
IOException | 如果發(fā)生 I/O 錯誤。 |
int skipBytes(int n) throws IOException
嘗試從輸入流中跳過 n 個字節(jié)的數(shù)據(jù),丟棄跳過的字節(jié)。 但是,它可能會跳過一些較小的字節(jié)數(shù),可能為零。 這可能是由多種情況中的任何一種造成的; 在跳過 n 個字節(jié)之前到達文件末尾只是一種可能性。 此方法從不拋出 EOFException。 返回實際跳過的字節(jié)數(shù)。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
n | 要跳過的字節(jié)數(shù)。 |
返回:
實際跳過的字節(jié)數(shù)。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 錯誤。 |
boolean readBoolean() throws IOException
讀取一個輸入字節(jié),如果該字節(jié)非零則返回 true,如果該字節(jié)為零則返回 false。 該方法適用于讀取接口DataOutput的writeBoolean方法寫入的字節(jié)。
返回:
讀取的布爾值。
Throws:
Throw名稱 | Throw描述 |
---|---|
EOFException | 如果此流在讀取所有字節(jié)之前到達末尾。 |
IOException | 如果發(fā)生 I/O 錯誤。 |
byte readByte() throws IOException
讀取并返回一個輸入字節(jié)。 該字節(jié)被視為 -128 到 127(含)范圍內(nèi)的有符號值。 該方法適用于讀取接口DataOutput的writeByte方法寫入的字節(jié)。
返回:
讀取的 8 位值。
Throws:
Throw名稱 | Throw描述 |
---|---|
EOFException | 如果此流在讀取所有字節(jié)之前到達末尾。 |
IOException | 如果發(fā)生 I/O 錯誤。 |
int readUnsignedByte() throws IOException
讀取一個輸入字節(jié),將其零擴展為 int 類型,并返回結果,因此范圍為 0 到 255。此方法適用于讀取接口 DataOutput 的 writeByte 方法寫入的字節(jié),前提是 writeByte 的參數(shù)為 旨在為 0 到 255 范圍內(nèi)的值。
返回:
讀取的無符號 8 位值。
Throws:
Throw名稱 | Throw描述 |
---|---|
EOFException | 如果此流在讀取所有字節(jié)之前到達末尾。 |
IOException | 如果發(fā)生 I/O 錯誤。 |
short readShort() throws IOException
讀取兩個輸入字節(jié)并返回一個短值。 設 a 為讀取的第一個字節(jié), b 為第二個字節(jié)。 返回的值為:
(short)((a << 8) | (b & 0xff))
該方法適用于讀取接口DataOutput的writeShort方法寫入的字節(jié)。
返回:
讀取的 16 位值。
Throws:
Throw名稱 | Throw描述 |
---|---|
EOFException | 如果此流在讀取所有字節(jié)之前到達末尾。 |
IOException | 如果發(fā)生 I/O 錯誤。 |
int readUnsignedShort() throws IOException
讀取兩個輸入字節(jié)并返回 0 到 65535 范圍內(nèi)的 int 值。設 a 為讀取的第一個字節(jié),b 為第二個字節(jié)。 返回的值為:
(((a & 0xff) << 8) | (b & 0xff))
如果 writeShort 的參數(shù)打算是 0 到 65535 范圍內(nèi)的值,則此方法適用于讀取接口 DataOutput 的 writeShort 方法寫入的字節(jié)。
返回:
讀取的無符號 16 位值。
Throws:
Throw名稱 | Throw描述 |
---|---|
EOFException | 如果此流在讀取所有字節(jié)之前到達末尾。 |
IOException | 如果發(fā)生 I/O 錯誤。 |
char readChar() throws IOException
讀取兩個輸入字節(jié)并返回一個 char 值。 設 a 為讀取的第一個字節(jié), b 為第二個字節(jié)。 返回的值為:
(char)((a << 8) | (b & 0xff))
該方法適用于讀取接口DataOutput的writeChar方法寫入的字節(jié)。
返回:
讀取的 char 值。
Throws:
Throw名稱 | Throw描述 |
---|---|
EOFException | 如果此流在讀取所有字節(jié)之前到達末尾。 |
IOException | 如果發(fā)生 I/O 錯誤。 |
int readInt() throws IOException
讀取四個輸入字節(jié)并返回一個 int 值。 讓 a-d 成為讀取的第一個到第四個字節(jié)。 返回的值為:
(((a & 0xff) << 24) | ((b & 0xff) << 16) |
((c & 0xff) << 8) | (d & 0xff))
該方法適用于讀取接口DataOutput的writeInt方法寫入的字節(jié)。
返回:
讀取的 int 值。
Throws:
Throw名稱 | Throw描述 |
---|---|
EOFException | 如果此流在讀取所有字節(jié)之前到達末尾。 |
IOException | 如果發(fā)生 I/O 錯誤。 |
long readLong() throws IOException
讀取八個輸入字節(jié)并返回一個 long 值。 讓 a-h 成為讀取的第一個到第八個字節(jié)。 返回的值為:
(((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方法寫入的字節(jié)。
返回:
讀取的 long 值。
Throws:
Throw名稱 | Throw描述 |
---|---|
EOFException | 如果此流在讀取所有字節(jié)之前到達末尾。 |
IOException | 如果發(fā)生 I/O 錯誤。 |
float readFloat() throws IOException
讀取四個輸入字節(jié)并返回一個浮點值。 它首先按照 readInt 方法的方式構造一個 int 值,然后按照 Float.intBitsToFloat 方法的方式將此 int 值轉(zhuǎn)換為浮點數(shù)。 該方法適用于讀取接口DataOutput的writeFloat方法寫入的字節(jié)。
返回:
讀取的浮點值。
Throws:
Throw名稱 | Throw描述 |
---|---|
EOFException | 如果此流在讀取所有字節(jié)之前到達末尾。 |
IOException | 如果發(fā)生 I/O 錯誤。 |
double readDouble() throws IOException
讀取八個輸入字節(jié)并返回一個雙精度值。 它首先按照 readLong 方法的方式構造一個 long 值,然后按照 Double.longBitsToDouble 方法的方式將此 long 值轉(zhuǎn)換為 double。 該方法適用于讀取接口DataOutput的writeDouble方法寫入的字節(jié)。
返回:
讀取的雙精度值。
Throws:
Throw名稱 | Throw描述 |
---|---|
EOFException | 如果此流在讀取所有字節(jié)之前到達末尾。 |
IOException | 如果發(fā)生 I/O 錯誤。 |
String readLine() throws IOException
從輸入流中讀取下一行文本。它讀取連續(xù)的字節(jié),將每個字節(jié)分別轉(zhuǎn)換為一個字符,直到遇到行終止符或文件結尾;然后將讀取的字符作為字符串返回。請注意,由于此方法處理字節(jié),因此它不支持輸入完整的 Unicode 字符集。
如果在讀取一個字節(jié)之前遇到文件結尾,則返回 null。否則,讀取的每個字節(jié)都通過零擴展轉(zhuǎn)換為 char 類型。如果遇到字符“\n”,則將其丟棄并停止讀取。如果遇到字符“\r”,則將其丟棄,如果后面的字節(jié)轉(zhuǎn)換為字符“\n”,則也將其丟棄;然后停止閱讀。如果在遇到字符 '\n' 和 '\r' 之前遇到文件結尾,則停止讀取。停止讀取后,將返回一個字符串,其中包含按順序讀取且未丟棄的所有字符。請注意,此字符串中的每個字符的值都小于 \u0100,即 (char)256。
返回:
輸入流中的下一行文本,如果在讀取字節(jié)之前遇到文件結尾,則返回 null。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 錯誤。 |
String readUTF() throws IOException
讀取使用修改后的 UTF-8 格式編碼的字符串。 readUTF 的一般約定是它讀取以修改后的 UTF-8 格式編碼的 Unicode 字符串的表示;然后這個字符串作為字符串返回。
首先,讀取兩個字節(jié)并使用 readUnsignedShort 方法的方式構造一個無符號的 16 位整數(shù)。這個整數(shù)值稱為 UTF 長度,并指定要讀取的附加字節(jié)數(shù)。然后通過分組考慮將這些字節(jié)轉(zhuǎn)換為字符。每個組的長度是根據(jù)組的第一個字節(jié)的值計算的。組后面的字節(jié)(如果有的話)是下一組的第一個字節(jié)。
如果組的第一個字節(jié)與位模式 0xxxxxxx 匹配(其中 x 表示“可能是 0 或 1”),則該組僅由該字節(jié)組成。該字節(jié)被零擴展以形成一個字符。
如果組的第一個字節(jié)與位模式 110xxxxx 匹配,則該組由該字節(jié) a 和第二個字節(jié) b 組成。如果沒有字節(jié) b(因為字節(jié) a 是要讀取的最后一個字節(jié)),或者如果字節(jié) b 與位模式 10xxxxxx 不匹配,則拋出 UTFDataFormatException。否則,該組將轉(zhuǎn)換為字符:
(char)(((a & 0x1F) << 6) | (b & 0x3F))
如果組的第一個字節(jié)與位模式 1110xxxx 匹配,則該組由該字節(jié) a 和另外兩個字節(jié) b 和 c 組成。 如果沒有字節(jié) c(因為字節(jié) a 是要讀取的最后兩個字節(jié)之一),或者字節(jié) b 或字節(jié) c 與位模式 10xxxxxx 不匹配,則拋出 UTFDataFormatException。 否則,該組將轉(zhuǎn)換為字符:
(char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))
如果組的第一個字節(jié)匹配模式 1111xxxx 或模式 10xxxxxx,則拋出 UTFDataFormatException。
如果在整個過程中的任何時候遇到文件結尾,則拋出 EOFException。
在通過此過程將每個組轉(zhuǎn)換為字符后,按照從輸入流中讀取相應組的相同順序收集字符,形成一個字符串,然后返回該字符串。
接口DataOutput的writeUTF方法可用于寫入適合該方法讀取的數(shù)據(jù)。
返回:
一個 Unicode 字符串。
Throws:
Throw名稱 | Throw描述 |
---|---|
EOFException | 如果此流在讀取所有字節(jié)之前到達末尾。 |
IOException | 如果發(fā)生 I/O 錯誤。 |
UTFDataFormatException | 如果字節(jié)不代表字符串的有效修改 UTF-8 編碼。 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: