日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

接口 DataInput

發布時間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 接口 DataInput 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
java.io

接口 DataInput

所有已知子接口:
ImageInputStream, ImageOutputStream, ObjectInput
所有已知實現類:
DataInputStream, FileCacheImageInputStream, FileCacheImageOutputStream, FileImageInputStream, FileImageOutputStream, ImageInputStreamImpl, ImageOutputStreamImpl, MemoryCacheImageInputStream, MemoryCacheImageOutputStream, ObjectInputStream, RandomAccessFile

public interface DataInput

DataInput 接口用于從二進制流中讀取字節,并根據所有 Java 基本類型數據進行重構。同時還提供根據 UTF-8 修改版格式的數據重構 String 的工具。

對于此接口中的所有數據讀取例程來說,如果在讀取所需字節數之前已經到達文件末尾 (end of file),則將拋出 EOFException(IOException 的一種)。如果因為到達文件末尾以外的其他原因無法讀取字節,則將拋出 IOException 而不是 EOFException。尤其是,在輸入流已關閉的情況下,將拋出 IOException。

UTF-8 修改版

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字節 2
?
110位 10-6
10位 5-0


'\u0800' 到 '\uFFFF' 范圍內的 char 值用三個字節表示:

位值字節 1字節 2字節 3
?
1 1 1 0 位 15-12
1 0 位 11-6
1 0 位 5-0

這種格式與標準 UTF-8 格式之間的不同如下:

  • null 字節 '\u0000' 是用 2-byte 格式而不是 1-byte 格式編碼的,因此已編碼的字符串中決不會有嵌入的 null。
  • 僅使用 1-byte、2-byte 和 3-byte 格式。
  • 增補字符是以代理項對的形式表示的。

?

從以下版本開始:
JDK1.0

方法摘要
?booleanreadBoolean()
??????????讀取一個輸入字節,如果該字節不是零,則返回 true如果是零,則返回 false。
?bytereadByte()
??????????讀取并返回一個輸入字節。
?charreadChar()
??????????讀取兩個輸入字節并返回一個 char 值。
?doublereadDouble()
??????????讀取八個輸入字節并返回一個 double 值。
?floatreadFloat()
??????????讀取四個輸入字節并返回一個 float 值。
?voidreadFully(byte[]?b)
??????????從輸入流中讀取一些字節,并將它們存儲在緩沖區數組 b 中。
?voidreadFully(byte[]?b, int?off, int?len)
??????????從輸入流中讀取 len 個字節。
?intreadInt()
??????????讀取四個輸入字節并返回一個 int 值。
?StringreadLine()
??????????從輸入流中讀取下一文本行。
?longreadLong()
??????????讀取八個輸入字節并返回一個 long 值。
?shortreadShort()
??????????讀取兩個輸入字節并返回一個 short 值。
?intreadUnsignedByte()
??????????讀取一個輸入字節,將它左側補零 (zero-extend) 轉變為 int 類型,并返回結果,所以結果的范圍是 0 到 255。
?intreadUnsignedShort()
??????????讀取兩個輸入字節,并返回 0 到 65535 范圍內的一個 int 值。
?StringreadUTF()
??????????讀入一個已使用 UTF-8 修改版格式編碼的字符串。
?intskipBytes(int?n)
??????????試圖在輸入流中跳過數據的 n 個字節,并丟棄跳過的字節。

?

方法詳細信息

readFully

void readFully(byte[]?b)throws IOException
從輸入流中讀取一些字節,并將它們存儲在緩沖區數組 b 中。讀取的字節數等于 b 的長度。

在出現以下條件之一以前,此方法將一直阻塞:

  • 輸入數據的 b.length 個字節是可用的,在這種情況下,正常返回。
  • 檢測到文件末尾,在這種情況下,拋出 EOFException。
  • 發生 I/O 錯誤,在這種情況下,將拋出 IOException,而不是 EOFException。

如果 b 為 null,則拋出 NullPointerException。如果 b.length 為零,則不讀取字節。否則,將讀取的第一個字節存儲到元素 b[0] 中,下一個字節存儲到 b[1] 中,依此類推。如果此方法拋出異常,則可能是因為已經用輸入流中的數據更新了 b 的某些(但非全部)字節。

?

參數:
b - 存儲讀取數據的緩沖區。
拋出:
EOFException - 如果此流在讀取所有字節之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readFully

void readFully(byte[]?b, int?off, int?len) throws IOException

從輸入流中讀取 len 個字節。

在出現以下條件之一以前,此方法將一直阻塞:

?

  • 輸入數據的 len 個字節是可用的,在這種情況下,正常返回。
  • 檢測到文件末尾,在這種情況下,拋出 EOFException。
  • 如果發生 I/O 錯誤,在這種情況下,將拋出 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 錯誤。

skipBytes

int skipBytes(int?n) throws IOException
試圖在輸入流中跳過數據的 n 個字節,并丟棄跳過的字節。不過,可以跳過更少的字節數,該字節數甚至可以為零。這可能由很多情況引起;在已經跳過 n 個字節前到達文件末尾只是其中的一種可能。此方法從不拋出 EOFException。返回實際跳過的字節數。

?

參數:
n - 要跳過的字節數。
返回:
實際跳過的字節數。
拋出:
IOException - 如果發生 I/O 錯誤。

readBoolean

boolean readBoolean() throws IOException
讀取一個輸入字節,如果該字節不是零,則返回 true,如果是零,則返回 false。此方法適用于讀取用接口 DataOutput 的 writeBoolean 方法寫入的字節。

?

返回:
讀取的 boolean 值。
拋出:
EOFException - 如果此流在讀取所有字節之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readByte

byte readByte() throws IOException
讀取并返回一個輸入字節。該字節被看作是 -128 到 127(包含)范圍內的一個有符號值。此方法適用于讀取用接口 DataOutput 的 writeByte 方法寫入的字節。

?

返回:
讀取的 8 位值。
拋出:
EOFException - 如果此流在讀取所有字節之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readUnsignedByte

int readUnsignedByte() throws IOException
讀取一個輸入字節,將它左側補零 (zero-extend) 轉變為 int 類型,并返回結果,所以結果的范圍是 0 到 255。如果接口 DataOutput 的 writeByte 方法的參數是 0 到 255 之間的值,則此方法適用于讀取用 writeByte 寫入的字節。

?

返回:
讀取的無符號 8 位值。
拋出:
EOFException - 如果此流在讀取所有字節之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readShort

short readShort() throws IOException
讀取兩個輸入字節并返回一個 short 值。設 a 為第一個讀取字節,b 為第二個讀取字節。返回的值是:

?

(short)((a << 8) | (b & 0xff)) 此方法適用于讀取用接口 DataOutput 的 writeShort 方法寫入的字節。

?

返回:
讀取的 16 位值。
拋出:
EOFException - 如果此流在讀取所有字節之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readUnsignedShort

int readUnsignedShort() throws IOException
讀取兩個輸入字節,并返回 0 到 65535 范圍內的一個 int 值。設 a 為第一個讀取字節,b 為第二個讀取字節。返回的值是:

?

(((a & 0xff) << 8) | (b & 0xff)) 如果接口 DataOutput 的 writeShort 方法的參數是 0 到 65535 范圍內的值,則此方法適用于讀取用 writeShort 寫入的字節。

?

返回:
讀取的無符號 16 位值。
拋出:
EOFException - 如果此流在讀取所有字節之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readChar

char readChar() throws IOException
讀取兩個輸入字節并返回一個 char 值。設 a 為第一個讀取字節,b 為第二個讀取字節。返回的值是:

?

(char)((a << 8) | (b & 0xff)) 此方法適用于讀取用接口 DataOutput 的 writeChar 方法寫入的字節。

?

返回:
讀取的 char 值。
拋出:
EOFException - 如果此流在讀取所有字節之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readInt

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

readLong

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

readFloat

float readFloat() throws IOException
讀取四個輸入字節并返回一個 float 值。實現這一點的方法是:先使用與 readInt 方法完全相同的方式構造一個 int 值然后使用與 Float.intBitsToFloat 方法完全相同的方式將此 int 值轉換成一個 float 值。此方法適用于讀取用接口 DataOutput 的 writeFloat 方法寫入的字節。

?

返回:
讀取的 float 值。
拋出:
EOFException - 如果此流在讀取所有字節之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readDouble

double readDouble() throws IOException
讀取八個輸入字節并返回一個 double 值。實現這一點的方法是:先使用與 readlong 方法完全相同的方式構造一個 long 值,然后使用與 Double.longBitsToDouble 方法完全相同的方式將此 long 值轉換成一個 double 值。此方法適用于讀取用接口 DataOutput 的 writeDouble 方法寫入的字節。

?

返回:
讀取的 double 值。
拋出:
EOFException - 如果此流在讀取所有字節之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readLine

String readLine() throws IOException
從輸入流中讀取下一文本行。該方法讀取連續的字節,將每個字節分別轉換成一個字符,直到遇到行結尾符或到達末尾;然后以 String 形式返回讀取的字符。注意,因為此方法用于處理字符,所以它不支持整個 Unicode 字符集的輸入。

如果在一個字節都沒有讀取的時候就到達文件末尾,則返回 null。否則,通過左側補零將讀取的每個字節轉換成 char 類型的值。如果遇到字符 '\n',則丟棄它并且停止讀取。如果遇到字符 '\r' 則丟棄它如果后續字節轉變成字符 '\n',則同樣丟棄它并停止讀取。如果在遇到字符 '\n' 和 '\r' 之一前到達文件末尾,則停止讀取。一旦已停止讀取,則返回一個 String,它按順序包含所有已讀取且未丟棄的字符。注意,此字符串中的每個字符的值都將小于 \u0100(即 (char)256)的值。

?

返回:
輸入流中文本的下一行,如果還沒有讀取一個字節就到達文件末尾,則返回 null。
拋出:
IOException - 如果發生 I/O 錯誤。

readUTF

String readUTF() throws IOException
讀入一個已使用 UTF-8 修改版格式編碼的字符串。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 方法寫入適合此方法讀取的數據。

?

返回:
一個 Unicode 字符串。
拋出:
EOFException - 如果此流在讀取所有字節之前到達末尾。
IOException - 如果發生 I/O 錯誤。
UTFDataFormatException - 如果這些字節不表示一個有效的、UTF-8 修改版編碼的字符串。

?

總結

以上是生活随笔為你收集整理的接口 DataInput的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。