新聞中心
DataInput

public interface DataInput
DataInput 接口提供從二進(jìn)制流中讀取字節(jié)并從中重建任何 Java 原始類型的數(shù)據(jù)。 還有一種工具可以從修改后的 UTF-8 格式的數(shù)據(jù)中重建字符串。
對(duì)于該接口中的所有讀取例程,通常情況下,如果在讀取所需字節(jié)數(shù)之前到達(dá)文件末尾,則會(huì)拋出 EOFException(這是一種 IOException)。 如果由于文件結(jié)尾以外的任何原因無法讀取任何字節(jié),則拋出除 EOFException 之外的 IOException。 特別是,如果輸入流已關(guān)閉,則可能會(huì)引發(fā) IOException。
修改后的 UTF-8
DataInput 和 DataOutput 接口的實(shí)現(xiàn)以對(duì) UTF-8 稍作修改的格式表示 Unicode 字符串。 (有關(guān)標(biāo)準(zhǔn) UTF-8 格式的信息,請(qǐng)參閱 Unicode 標(biāo)準(zhǔn)版本 4.0 的第 3.9 節(jié) Unicode 編碼形式)。 請(qǐng)注意,在下表中,最高有效位出現(xiàn)在最左側(cè)的列中。
此格式與標(biāo)準(zhǔn) UTF-8 格式的區(qū)別如下:
- 空字節(jié) '\u0000' 以 2 字節(jié)格式而不是 1 字節(jié)編碼,因此編碼的字符串永遠(yuǎn)不會(huì)嵌入空值。
- 僅使用 1 字節(jié)、2 字節(jié)和 3 字節(jié)格式。
- 補(bǔ)充字符以代理對(duì)的形式表示。
Since:
JDK1.0
方法總結(jié)
| 修飾符和類型 | 方法 | 描述 |
|---|---|---|
| boolean | readBoolean() | 讀取一個(gè)輸入字節(jié),如果該字節(jié)非零則返回 true,如果該字節(jié)為零則返回 false。 |
| byte | readByte() | 讀取并返回一個(gè)輸入字節(jié)。 |
| char | readChar() | 讀取兩個(gè)輸入字節(jié)并返回一個(gè) char 值。 |
| double | readDouble() | 讀取八個(gè)輸入字節(jié)并返回一個(gè)雙精度值。 |
| float | readFloat() | 讀取四個(gè)輸入字節(jié)并返回一個(gè)浮點(diǎn)值。 |
| void | readFully(byte[] b) | 從輸入流中讀取一些字節(jié)并將它們存儲(chǔ)到緩沖區(qū)數(shù)組中 b。 |
| void | readFully(byte[] b, int off, int len) | 從輸入流中讀取 len 個(gè)字節(jié)。 |
| int | readInt() | 讀取四個(gè)輸入字節(jié)并返回一個(gè) int 值。 |
| String | readLine() | 從輸入流中讀取下一行文本。 |
| long | readLong() | 讀取八個(gè)輸入字節(jié)并返回一個(gè) long 值。 |
| short | readShort() | 讀取兩個(gè)輸入字節(jié)并返回一個(gè)短值。 |
| int | readUnsignedByte() | 讀取一個(gè)輸入字節(jié),將其零擴(kuò)展為 int 類型,并返回結(jié)果,因此該結(jié)果在 0 到 255 的范圍內(nèi)。 |
| int | readUnsignedShort() | 讀取兩個(gè)輸入字節(jié)并返回 0 到 65535 范圍內(nèi)的 int 值。 |
| String | readUTF() | 讀取使用修改后的 UTF-8 格式編碼的字符串。 |
| int | skipBytes(int n) | 嘗試從輸入流中跳過 n 個(gè)字節(jié)的數(shù)據(jù),丟棄跳過的字節(jié)。 |
方法詳情
readFully
void readFully(byte[] b) throws IOException
從輸入流中讀取一些字節(jié)并將它們存儲(chǔ)到緩沖區(qū)數(shù)組中 b。 讀取的字節(jié)數(shù)等于 b 的長(zhǎng)度。
此方法會(huì)阻塞,直到發(fā)生以下情況之一:
- b.length 字節(jié)的輸入數(shù)據(jù)可用,在這種情況下正常返回。
- 檢測(cè)到文件結(jié)尾,在這種情況下拋出 EOFException。
- 發(fā)生 I/O 錯(cuò)誤,在這種情況下會(huì)拋出 EOFException 以外的 IOException。
如果 b 為 null,則拋出 NullPointerException。 如果 b.length 為零,則不讀取任何字節(jié)。 否則,讀取的第一個(gè)字節(jié)存儲(chǔ)到元素 b[0] 中,下一個(gè)字節(jié)存儲(chǔ)到 b[1] 中,依此類推。 如果此方法引發(fā)異常,則可能是 b 的某些但不是所有字節(jié)已使用來自輸入流的數(shù)據(jù)進(jìn)行了更新。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| b | 讀取數(shù)據(jù)的緩沖區(qū)。 |
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| EOFException | 如果此流在讀取所有字節(jié)之前到達(dá)末尾。 |
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
readFully
void readFully(byte[] b, int off, int len) throws IOException
從輸入流中讀取 len 個(gè)字節(jié)。
此方法會(huì)阻塞,直到發(fā)生以下情況之一:
- len 字節(jié)的輸入數(shù)據(jù)可用,在這種情況下會(huì)正常返回。
- 檢測(cè)到文件結(jié)尾,在這種情況下拋出 EOFException。
- 發(fā)生 I/O 錯(cuò)誤,在這種情況下會(huì)拋出 EOFException 以外的 IOException。
如果 b 為 null,則拋出 NullPointerException。 如果 off 為負(fù)數(shù),或 len 為負(fù)數(shù),或 off+len 大于數(shù)組 b 的長(zhǎng)度,則拋出 IndexOutOfBoundsException。 如果 len 為零,則不讀取任何字節(jié)。 否則,讀取的第一個(gè)字節(jié)存儲(chǔ)到元素 b[off] 中,下一個(gè)字節(jié)存儲(chǔ)到 b[off+1] 中,依此類推。 讀取的字節(jié)數(shù)最多等于 len。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| b | 讀取數(shù)據(jù)的緩沖區(qū)。 |
| off | 一個(gè) int,指定數(shù)據(jù)的偏移量。 |
| len | 一個(gè) int 指定要讀取的字節(jié)數(shù)。 |
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| EOFException | 如果此流在讀取所有字節(jié)之前到達(dá)末尾。 |
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
skipBytes
int skipBytes(int n) throws IOException
嘗試從輸入流中跳過 n 個(gè)字節(jié)的數(shù)據(jù),丟棄跳過的字節(jié)。 但是,它可能會(huì)跳過一些較小的字節(jié)數(shù),可能為零。 這可能是由多種情況中的任何一種造成的; 在跳過 n 個(gè)字節(jié)之前到達(dá)文件末尾只是一種可能性。 此方法從不拋出 EOFException。 返回實(shí)際跳過的字節(jié)數(shù)。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| n | 要跳過的字節(jié)數(shù)。 |
返回:
實(shí)際跳過的字節(jié)數(shù)。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
readBoolean
boolean readBoolean() throws IOException
讀取一個(gè)輸入字節(jié),如果該字節(jié)非零則返回 true,如果該字節(jié)為零則返回 false。 該方法適用于讀取接口DataOutput的writeBoolean方法寫入的字節(jié)。
返回:
讀取的布爾值。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| EOFException | 如果此流在讀取所有字節(jié)之前到達(dá)末尾。 |
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
readByte
byte readByte() throws IOException
讀取并返回一個(gè)輸入字節(jié)。 該字節(jié)被視為 -128 到 127(含)范圍內(nèi)的有符號(hào)值。 該方法適用于讀取接口DataOutput的writeByte方法寫入的字節(jié)。
返回:
讀取的 8 位值。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| EOFException | 如果此流在讀取所有字節(jié)之前到達(dá)末尾。 |
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
readUnsignedByte
int readUnsignedByte() throws IOException
讀取一個(gè)輸入字節(jié),將其零擴(kuò)展為 int 類型,并返回結(jié)果,因此范圍為 0 到 255。此方法適用于讀取接口 DataOutput 的 writeByte 方法寫入的字節(jié),前提是 writeByte 的參數(shù)為 旨在為 0 到 255 范圍內(nèi)的值。
返回:
讀取的無符號(hào) 8 位值。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| EOFException | 如果此流在讀取所有字節(jié)之前到達(dá)末尾。 |
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
readShort
short readShort() throws IOException
讀取兩個(gè)輸入字節(jié)并返回一個(gè)短值。 設(shè) a 為讀取的第一個(gè)字節(jié), b 為第二個(gè)字節(jié)。 返回的值為:
(short)((a << 8) | (b & 0xff))
該方法適用于讀取接口DataOutput的writeShort方法寫入的字節(jié)。
返回:
讀取的 16 位值。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| EOFException | 如果此流在讀取所有字節(jié)之前到達(dá)末尾。 |
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
readUnsignedShort
int readUnsignedShort() throws IOException
讀取兩個(gè)輸入字節(jié)并返回 0 到 65535 范圍內(nèi)的 int 值。設(shè) a 為讀取的第一個(gè)字節(jié),b 為第二個(gè)字節(jié)。 返回的值為:
(((a & 0xff) << 8) | (b & 0xff))
如果 writeShort 的參數(shù)打算是 0 到 65535 范圍內(nèi)的值,則此方法適用于讀取接口 DataOutput 的 writeShort 方法寫入的字節(jié)。
返回:
讀取的無符號(hào) 16 位值。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| EOFException | 如果此流在讀取所有字節(jié)之前到達(dá)末尾。 |
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
readChar
char readChar() throws IOException
讀取兩個(gè)輸入字節(jié)并返回一個(gè) char 值。 設(shè) a 為讀取的第一個(gè)字節(jié), b 為第二個(gè)字節(jié)。 返回的值為:
(char)((a << 8) | (b & 0xff))
該方法適用于讀取接口DataOutput的writeChar方法寫入的字節(jié)。
返回:
讀取的 char 值。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| EOFException | 如果此流在讀取所有字節(jié)之前到達(dá)末尾。 |
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
readInt
int readInt() throws IOException
讀取四個(gè)輸入字節(jié)并返回一個(gè) int 值。 讓 a-d 成為讀取的第一個(gè)到第四個(gè)字節(jié)。 返回的值為:
(((a & 0xff) << 24) | ((b & 0xff) << 16) |
((c & 0xff) << 8) | (d & 0xff))
該方法適用于讀取接口DataOutput的writeInt方法寫入的字節(jié)。
返回:
讀取的 int 值。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| EOFException | 如果此流在讀取所有字節(jié)之前到達(dá)末尾。 |
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
readLong
long readLong() throws IOException
讀取八個(gè)輸入字節(jié)并返回一個(gè) long 值。 讓 a-h 成為讀取的第一個(gè)到第八個(gè)字節(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é)之前到達(dá)末尾。 |
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
readFloat
float readFloat() throws IOException
讀取四個(gè)輸入字節(jié)并返回一個(gè)浮點(diǎn)值。 它首先按照 readInt 方法的方式構(gòu)造一個(gè) int 值,然后按照 Float.intBitsToFloat 方法的方式將此 int 值轉(zhuǎn)換為浮點(diǎn)數(shù)。 該方法適用于讀取接口DataOutput的writeFloat方法寫入的字節(jié)。
返回:
讀取的浮點(diǎn)值。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| EOFException | 如果此流在讀取所有字節(jié)之前到達(dá)末尾。 |
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
readDouble
double readDouble() throws IOException
讀取八個(gè)輸入字節(jié)并返回一個(gè)雙精度值。 它首先按照 readLong 方法的方式構(gòu)造一個(gè) long 值,然后按照 Double.longBitsToDouble 方法的方式將此 long 值轉(zhuǎn)換為 double。 該方法適用于讀取接口DataOutput的writeDouble方法寫入的字節(jié)。
返回:
讀取的雙精度值。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| EOFException | 如果此流在讀取所有字節(jié)之前到達(dá)末尾。 |
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
readLine
String readLine() throws IOException
從輸入流中讀取下一行文本。它讀取連續(xù)的字節(jié),將每個(gè)字節(jié)分別轉(zhuǎn)換為一個(gè)字符,直到遇到行終止符或文件結(jié)尾;然后將讀取的字符作為字符串返回。請(qǐng)注意,由于此方法處理字節(jié),因此它不支持輸入完整的 Unicode 字符集。
如果在讀取一個(gè)字節(jié)之前遇到文件結(jié)尾,則返回 null。否則,讀取的每個(gè)字節(jié)都通過零擴(kuò)展轉(zhuǎn)換為 char 類型。如果遇到字符“\n”,則將其丟棄并停止讀取。如果遇到字符“\r”,則將其丟棄,如果后面的字節(jié)轉(zhuǎn)換為字符“\n”,則也將其丟棄;然后停止閱讀。如果在遇到字符 '\n' 和 '\r' 之前遇到文件結(jié)尾,則停止讀取。停止讀取后,將返回一個(gè)字符串,其中包含按順序讀取且未丟棄的所有字符。請(qǐng)注意,此字符串中的每個(gè)字符的值都小于 \u0100,即 (char)256。
返回:
輸入流中的下一行文本,如果在讀取字節(jié)之前遇到文件結(jié)尾,則返回 null。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
readUTF
String readUTF() throws IOException
讀取使用修改后的 UTF-8 格式編碼的字符串。 readUTF 的一般約定是它讀取以修改后的 UTF-8 格式編碼的 Unicode 字符串的表示;然后這個(gè)字符串作為字符串返回。
首先,讀取兩個(gè)字節(jié)并使用 readUnsignedShort 方法的方式構(gòu)造一個(gè)無符號(hào)的 16 位整數(shù)。這個(gè)整數(shù)值稱為 UTF 長(zhǎng)度,并指定要讀取的附加字節(jié)數(shù)。然后通過分組考慮將這些字節(jié)轉(zhuǎn)換為字符。每個(gè)組的長(zhǎng)度是根據(jù)組的第一個(gè)字節(jié)的值計(jì)算的。組后面的字節(jié)(如果有的話)是下一組的第一個(gè)字節(jié)。
如果組的第一個(gè)字節(jié)與位模式 0xxxxxxx 匹配(其中 x 表示“可能是 0 或 1”),則該組僅由該字節(jié)組成。該字節(jié)被零擴(kuò)展以形成一個(gè)字符。
如果組的第一個(gè)字節(jié)與位模式 110xxxxx 匹配,則該組由該字節(jié) a 和第二個(gè)字節(jié) b 組成。如果沒有字節(jié) b(因?yàn)樽止?jié) a 是要讀取的最后一個(gè)字節(jié)),或者如果字節(jié) b 與位模式 10xxxxxx 不匹配,則拋出 UTFDataFormatException。否則,該組將轉(zhuǎn)換為字符:
(char)(((a & 0x1F) << 6) | (b & 0x3F))
如果組的第一個(gè)字節(jié)與位模式 1110xxxx 匹配,則該組由該字節(jié) a 和另外兩個(gè)字節(jié) b 和 c 組成。 如果沒有字節(jié) c(因?yàn)樽止?jié) a 是要讀取的最后兩個(gè)字節(jié)之一),或者字節(jié) b 或字節(jié) c 與位模式 10xxxxxx 不匹配,則拋出 UTFDataFormatException。 否則,該組將轉(zhuǎn)換為字符:
(char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))
如果組的第一個(gè)字節(jié)匹配模式 1111xxxx 或模式 10xxxxxx,則拋出 UTFDataFormatException。
如果在整個(gè)過程中的任何時(shí)候遇到文件結(jié)尾,則拋出 EOFException。
在通過此過程將每個(gè)組轉(zhuǎn)換為字符后,按照從輸入流中讀取相應(yīng)組的相同順序收集字符,形成一個(gè)字符串,然后返回該字符串。
接口DataOutput的writeUTF方法可用于寫入適合該方法讀取的數(shù)據(jù)。
返回:
一個(gè) Unicode 字符串。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| EOFException | 如果此流在讀取所有字節(jié)之前到達(dá)末尾。 |
| IOException | 如果發(fā)生 I/O 錯(cuò)誤。 |
| UTFDataFormatException | 如果字節(jié)不代表字符串的有效修改 UTF-8 編碼。 |
分享題目:創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OSDataInput
文章鏈接:http://www.dlmjj.cn/article/djehcdh.html


咨詢
建站咨詢
