JavaTM 2 Platform
Standard Ed. 6

javax.imageio.stream
介面 ImageInputStream

所有父級介面:
DataInput
所有已知子介面:
ImageOutputStream
所有已知實作類別:
FileCacheImageInputStream, FileCacheImageOutputStream, FileImageInputStream, FileImageOutputStream, ImageInputStreamImpl, ImageOutputStreamImpl, MemoryCacheImageInputStream, MemoryCacheImageOutputStream

public interface ImageInputStream
extends DataInput

ImageReader 使用的可尋找輸入串流介面。各種輸入源(如 InputStreamFile 以及將來的快速 I/O 源)都可以通過此介面的恰當實作進行“包裹”,供 Image I/O API 使用。

另請參見:
ImageInputStreamImpl, FileImageInputStream, FileCacheImageInputStream, MemoryCacheImageInputStream

方法摘要
 void close()
          關閉串流。
 void flush()
          丟棄當前串流位置之前的串流初始部分。
 void flushBefore(long pos)
          丟棄所指示位置之前的串流初始部分。
 int getBitOffset()
          以整數的形式返回當前位偏移量,該整數在 0 到 7 之間(包含兩者)。
 ByteOrder getByteOrder()
          以 java.nio.ByteOrder 列舉實例的形式返回從此串流中讀取資料值時所使用的位元組順序。
 long getFlushedPosition()
          返回串流中可以執行尋找的最早位置。
 long getStreamPosition()
          返回串流的當前位元組位置。
 boolean isCached()
          如果此 ImageInputStream 本身為了允許逆向尋找而快取記憶體了資料,則返回 true
 boolean isCachedFile()
          如果此 ImageInputStream 本身為了允許逆向尋找而快取記憶體了資料,並且將其保存在臨時檔案中,則返回 true
 boolean isCachedMemory()
          如果此 ImageInputStream 本身為了允許逆向尋找而快取記憶體了資料,並將其保存在主存中,則返回 true
 long length()
          返回串流的總長度(如果已知)。
 void mark()
          標記串流中某個位置,供後續調用 reset 時返回。
 int read()
          從串流中讀取單個位元組,並以整數(0 到 255 之間)形式返回該位元組。
 int read(byte[] b)
          從串流中讀取至多 b.length 個位元組,並將其存儲到 b 中(從索引 0 開始)。
 int read(byte[] b, int off, int len)
          從串流中讀取至多 len 個位元組,並將其存儲到 b 中(從索引 off 開始)。
 int readBit()
          從串流中讀取單個位元組,並以 int01)的形式返回該位元組。
 long readBits(int numBits)
          從串流中讀取位串 (bitstring) 並以 long 的形式返回,使第一個讀取的位成為輸出的最高有效位。
 boolean readBoolean()
          從串流中讀取一個位元組,如果其不為 0,則返回 booleantrue;如果為 0,則返回 false
 byte readByte()
          從串流中讀取一個位元組,並以 byte 值的形式返回該位元組。
 void readBytes(IIOByteBuffer buf, int len)
          從串流中讀取至多 len 個位元組,並修改提供的 IIOByteBuffer 以指示可以找到資料的 byte 陣列、偏移量和長度。
 char readChar()
          與 readUnsignedShort 等效,唯一的不同在於它的結果使用 char 資料型別返回。
 double readDouble()
          從串流中讀取 8 個位元組,根據當前位元組順序將其連接(概念上),然後以 double 值的形式返回結果。
 float readFloat()
          從串流中讀取 4 個位元組,根據當前位元組順序將其連接(概念上),然後以 float 值的形式返回結果。
 void readFully(byte[] b)
          從串流中讀取 b.length 個位元組,並將其存儲到 b 中(從索引 0 開始)。
 void readFully(byte[] b, int off, int len)
          從串流中讀取 len 個位元組,並將其存儲到 b 中(從索引 off 開始)。
 void readFully(char[] c, int off, int len)
          根據當前位元組順序從串流中讀取 len 個 char(無符號 16 位整數),並將其存儲到 c 中(從索引 off 開始)。
 void readFully(double[] d, int off, int len)
          根據當前位元組順序從串流中讀取 len 個 double(64 位 IEEE 雙精度浮點值),並將其存儲到 d 中(從索引 off 開始)。
 void readFully(float[] f, int off, int len)
          根據當前位元組順序從串流中讀取 len 個 float(32 位 IEEE 單精度浮點值),並將其存儲到 f 中(從索引 off 開始)。
 void readFully(int[] i, int off, int len)
          根據當前位元組順序從串流中讀取 len 個 int(有符號 32 位整數),並將其存儲到 i 中(從索引 off 開始)。
 void readFully(long[] l, int off, int len)
          根據當前位元組順序從串流中讀取 len 個 long(有符號 64 位整數),並將其存儲到 l 中(從索引 off 開始)。
 void readFully(short[] s, int off, int len)
          根據當前位元組順序從串流中讀取 len 個 short(有符號 16 位整數),並將其存儲到 s 中(從索引 off 開始)。
 int readInt()
          從串流中讀取 4 個位元組,根據當前位元組順序將其連接(概念上),然後以 int 值的形式返回結果。
 String readLine()
          從輸入串流中讀取文本的下一行。
 long readLong()
          從串流中讀取 8 個位元組,根據當前位元組順序將其連接(概念上),然後以 long 值的形式返回結果。
 short readShort()
          從串流中讀取兩個位元組,根據當前位元組順序將其連接(概念上),然後以 short 值的形式返回結果。
 int readUnsignedByte()
          從串流中讀取一個位元組,將其轉換為 int(概念上),使用 0xff 屏蔽以便去掉所有符號擴展位,然後以 byte 值的形式返回。
 long readUnsignedInt()
          從串流中讀取 4 個位元組,根據當前位元組順序將其連接(概念上),將得到的值轉換為 long,使用 0xffffffffL 屏蔽以便去掉所有符號擴展位,然後以無符號 long 值的形式返回結果。
 int readUnsignedShort()
          從串流中讀取兩個位元組,根據當前位元組順序將其連接(概念上),將得到的值轉換為 int,使用 0xffff 屏蔽以便去掉所有符號擴展位,然後以無符號 int 值的形式返回結果。
 String readUTF()
          讀入一個已使用 UTF-8 修改版格式編碼的字元串。
 void reset()
          返回在最近一次非比對地調用 mark 時指向上一個位置(包括位偏移量)的串流指針。
 void seek(long pos)
          將當前串流位置設置為所需的位置。
 void setBitOffset(int bitOffset)
          將位偏移量設置為 0 到 7 之間(包含兩者)的整數。
 void setByteOrder(ByteOrder byteOrder)
          設置希望以後從此串流中讀取資料值時使用的位元組順序。
 int skipBytes(int n)
          將串流位置向前移動給定的位元組數。
 long skipBytes(long n)
          將串流位置向前移動給定的位元組數。
 

方法詳細資訊

setByteOrder

void setByteOrder(ByteOrder byteOrder)
設置希望以後從此串流中讀取資料值時使用的位元組順序。例如,如果以 4 位元組整數形式讀取位元組序列 '0x01 0x02 0x03 0x04',則使用網路位元組順序時結果為值 '0x01020304',使用逆向位元組順序時為值 '0x04030201'。

列舉類別 java.nio.ByteOrder 用於指定位元組順序。值 ByteOrder.BIG_ENDIAN 指定所謂的 big-endian 或網路位元組順序,該順序中高位位元組在前。Motorola 和 Sparc 處理器用此格式存儲資料,而 Intel 處理器使用與之相反的 ByteOrder.LITTLE_ENDIAN 順序存儲資料。

位元組順序對 readBits 方法返回的結果(或 ImageOutputStream.writeBits 寫入的值)沒有任何影響。

參數:
byteOrder - ByteOrder.BIG_ENDIANjava.nio.ByteOrder.LITTLE_ENDIAN,指示以後讀取時是使用網路順序還是使用與之相反的順序。
另請參見:
ByteOrder, getByteOrder(), readBits(int)

getByteOrder

ByteOrder getByteOrder()
java.nio.ByteOrder 列舉實例的形式返回從此串流中讀取資料值時所使用的位元組順序。

返回:
ByteOrder.BIG_ENDIANByteOrder.LITTLE_ENDIAN,指示要使用的位元組順序。
另請參見:
ByteOrder, setByteOrder(java.nio.ByteOrder)

read

int read()
         throws IOException
從串流中讀取單個位元組,並以整數(0 到 255 之間)形式返回該位元組。如果到達串流末尾,則返回 -1。

在進行讀取前,串流中的位偏移量被重置為 0。

返回:
串流中 int 形式的位元組值;或者返回 -1,指示 EOF(檔案結束標記)。
拋出:
IOException - 如果發生 I/O 錯誤。

read

int read(byte[] b)
         throws IOException
從串流中讀取至多 b.length 個位元組,並將其存儲到 b 中(從索引 0 開始)。返回讀取的位元組數。如果因到達串流末尾而無法讀取任何位元組,則返回 -1。

在進行讀取前,串流中的位偏移量被重置為 0。

參數:
b - 用來接收寫入的 byte 陣列。
返回:
實際讀取的位元組數;或者返回 -1,指示 EOF。
拋出:
NullPointerException - 如果 bnull
IOException - 如果發生 I/O 錯誤。

read

int read(byte[] b,
         int off,
         int len)
         throws IOException
從串流中讀取至多 len 個位元組,並將其存儲到 b 中(從索引 off 開始)。返回讀取的位元組數。如果因到達串流末尾而無法讀取任何位元組,則返回 -1

在進行讀取前,串流中的位偏移量被重置為 0。

參數:
b - 用來接收寫入的 byte 陣列。
off - 向 b 進行寫入的開始位置。
len - 要讀取的最大 byte 數。
返回:
實際讀取的位元組數;或者返回 -1,指示 EOF。
拋出:
NullPointerException - 如果 bnull
IndexOutOfBoundsException - 如果 off 為負、len 為負或者 off + len 大於 b.length
IOException - 如果發生 I/O 錯誤。

readBytes

void readBytes(IIOByteBuffer buf,
               int len)
               throws IOException
從串流中讀取至多 len 個位元組,並修改提供的 IIOByteBuffer 以指示可以找到資料的 byte 陣列、偏移量和長度。調用者不應該試圖修改 IIOByteBuffer 中找到的資料。

在進行讀取前,串流中的位偏移量被重置為 0。

參數:
buf - 要修改的 IIOByteBuffer 物件。
len - 要讀取的最大 byte 數。
拋出:
IndexOutOfBoundsException - 如果 len 為負。
NullPointerException - 如果 bufnull
IOException - 如果發生 I/O 錯誤。

readBoolean

boolean readBoolean()
                    throws IOException
從串流中讀取一個位元組,如果其不為 0,則返回 booleantrue;如果為 0,則返回 false

在進行讀取前,串流中的位偏移量被重置為 0。

指定者:
介面 DataInput 中的 readBoolean
返回:
取自串流的 boolean 值。
拋出:
EOFException - 如果到達串流末尾。
IOException - 如果發生 I/O 錯誤。

readByte

byte readByte()
              throws IOException
從串流中讀取一個位元組,並以 byte 值的形式返回該位元組。0x000x7f 之間的位元組值表示 0127 之間的整數值。0x800xff 之間的位元組值表示 -128-1 之間的負整數值。

在進行讀取前,串流中的位偏移量被重置為 0。

指定者:
介面 DataInput 中的 readByte
返回:
取自串流的單個位元組值。
拋出:
EOFException - 如果到達串流末尾。
IOException - 如果發生 I/O 錯誤。

readUnsignedByte

int readUnsignedByte()
                     throws IOException
從串流中讀取一個位元組,將其轉換為 int(概念上),使用 0xff 屏蔽以便去掉所有符號擴展位,然後以 byte 值的形式返回。

於是,0x000x7f 之間的位元組值便作為 0127 之間的整數值返回。0x800xff 之間的位元組值通常表示為負的 byte 值,它們將被映射成 128255 之間的正整數。

在進行讀取前,串流中的位偏移量被重置為 0。

指定者:
介面 DataInput 中的 readUnsignedByte
返回:
取自串流的無符號 byte 值。
拋出:
EOFException - 如果到達串流末尾。
IOException - 如果發生 I/O 錯誤。

readShort

short readShort()
                throws IOException
從串流中讀取兩個位元組,根據當前位元組順序將其連接(概念上),然後以 short 值的形式返回結果。

在進行讀取前,串流中的位偏移量被重置為 0。

指定者:
介面 DataInput 中的 readShort
返回:
取自串流的有符號 short 值。
拋出:
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。
另請參見:
getByteOrder()

readUnsignedShort

int readUnsignedShort()
                      throws IOException
從串流中讀取兩個位元組,根據當前位元組順序將其連接(概念上),將得到的值轉換為 int,使用 0xffff 屏蔽以便去掉所有符號擴展位,然後以無符號 int 值的形式返回結果。

在進行讀取前,串流中的位偏移量被重置為 0。

指定者:
介面 DataInput 中的 readUnsignedShort
返回:
取自串流的無符號 short 值(int 形式)。
拋出:
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。
另請參見:
getByteOrder()

readChar

char readChar()
              throws IOException
readUnsignedShort 等效,唯一的不同在於它的結果使用 char 資料型別返回。

在進行讀取前,串流中的位偏移量被重置為 0。

指定者:
介面 DataInput 中的 readChar
返回:
取自串流的無符號 char 值。
拋出:
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。
另請參見:
readUnsignedShort()

readInt

int readInt()
            throws IOException
從串流中讀取 4 個位元組,根據當前位元組順序將其連接(概念上),然後以 int 值的形式返回結果。

忽略串流中的位偏移量,將其視為 0。

指定者:
介面 DataInput 中的 readInt
返回:
取自串流的有符號 int 值。
拋出:
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。
另請參見:
getByteOrder()

readUnsignedInt

long readUnsignedInt()
                     throws IOException
從串流中讀取 4 個位元組,根據當前位元組順序將其連接(概念上),將得到的值轉換為 long,使用 0xffffffffL 屏蔽以便去掉所有符號擴展位,然後以無符號 long 值的形式返回結果。

在進行讀取前,串流中的位偏移量被重置為 0。

返回:
取自串流的無符號 int 值(long 形式)。
拋出:
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。
另請參見:
getByteOrder()

readLong

long readLong()
              throws IOException
從串流中讀取 8 個位元組,根據當前位元組順序將其連接(概念上),然後以 long 值的形式返回結果。

在進行讀取前,串流中的位偏移量被重置為 0。

指定者:
介面 DataInput 中的 readLong
返回:
取自串流的有符號 long 值。
拋出:
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。
另請參見:
getByteOrder()

readFloat

float readFloat()
                throws IOException
從串流中讀取 4 個位元組,根據當前位元組順序將其連接(概念上),然後以 float 值的形式返回結果。

在進行讀取前,串流中的位偏移量被重置為 0。

指定者:
介面 DataInput 中的 readFloat
返回:
取自串流的 float 值。
拋出:
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。
另請參見:
getByteOrder()

readDouble

double readDouble()
                  throws IOException
從串流中讀取 8 個位元組,根據當前位元組順序將其連接(概念上),然後以 double 值的形式返回結果。

在進行讀取前,串流中的位偏移量被重置為 0。

指定者:
介面 DataInput 中的 readDouble
返回:
取自串流的 double 值。
拋出:
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。
另請參見:
getByteOrder()

readLine

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

如果在一個位元組都沒有讀取的時候就遇到檔案結束標記,則返回 null。否則,通過左側補 0 將讀取的每個位元組轉換成 char 型別的值。如果遇到字元 '\n',則丟棄它並且停止讀取。如果遇到字元 '\r',則丟棄它;如果它後面的那個位元組轉變成字元 '\n',則同樣丟棄它,並且停止讀取。如果在遇到字元 '\n''\r' 之一前遇到檔案結束標記,則停止讀取。一旦已停止讀取,則返回一個 String,它按順序包含所有已讀取且未丟棄的字元。注意,此字元串中的每個字元的值都將小於 \u0100(即 (char)256)的值。

在進行讀取前,串流中的位偏移量被重置為 0。

指定者:
介面 DataInput 中的 readLine
返回:
一個 String,它包含取自串流的一行文本。
拋出:
IOException - 如果發生 I/O 錯誤。

readUTF

String readUTF()
               throws IOException
讀入一個已使用 UTF-8 修改版格式編碼的字元串。readUTF 的常規協定是:該方法讀取使用 UTF-8 修改版格式編碼的 Unicode 字元串的表示形式;然後以 String 的形式返回此字元串。

首先,讀取兩個位元組並按 readUnsignedShort 方法的方式使用這兩個位元組建構一個無符號 16 位整數,使用的是網路位元組順序(無論當前設置的是哪種位元組順序)。該整數值被稱為 UTF 長度,它指定要讀取的額外位元組數。然後成組地將這些位元組轉換為字元。每組的長度根據該組第一個位元組的值計算。緊跟在某個組後面的位元組(如果有)是下一組的第一個位元組。

如果組的第一個位元組與位網要 0xxxxxxx(其中 x 表示“可能為 01”)比對,則該組只有這一個位元組。該位元組被左側補 0,轉換成一個字元。

如果組的第一個位元組與位網要 110xxxxx 比對,則該組只由位元組 a 和另一個位元組 b 組成。如果沒有位元組 b(因為位元組 a 是要讀取的最後一個位元組),或者位元組 b 與位網要 10xxxxxx 不比對,則拋出 UTFDataFormatException。否則,將該組轉換成字元:


 (char)(((a& 0x1F) << 6) | (b & 0x3F))
 
如果組的第一個位元組與位網要 1110xxxx 比對,則該組由位元組 a 和另外兩個位元組 bc 組成。如果沒有位元組 c(因為位元組 a 是要讀取的最後兩個位元組之一),或者位元組 b 或位元組 c 與位網要 10xxxxxx 不比對,則拋出 UTFDataFormatException。否則,將該組轉換成字元:


 (char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))
 
如果組的第一個位元組與網要 1111xxxx 或網要 10xxxxxx 比對,則拋出 UTFDataFormatException

如果在整個執行過程中的任意時間遇到檔案結束標記,則拋出 EOFException

在通過此過程將每個組轉換成字元後,按照從輸入串流中讀取相應組的順序,將這些字元收集在一起,形成一個 String,然後該字元串將被返回。

忽略當前設置的位元組順序。

在進行讀取前,串流中的位偏移量被重置為 0。

註:在使用標準 UTF-8 圖像格式的實作中不應該使用此方法,因為此處使用的 UTF-8 修改版與標準 UTF-8 不相容。

指定者:
介面 DataInput 中的 readUTF
返回:
從串流中讀取的 String。
拋出:
EOFException - 如果此串流在讀取所有位元組之前到達末尾。
UTFDataFormatException - 如果這些位元組不表示一個有效的、UTF-8 修改版編碼的字元串。
IOException - 如果發生 I/O 錯誤。

readFully

void readFully(byte[] b,
               int off,
               int len)
               throws IOException
從串流中讀取 len 個位元組,並將其存儲到 b 中(從索引 off 開始)。如果到達串流末尾,則將拋出 EOFException

在進行讀取前,串流中的位偏移量被重置為 0。

指定者:
介面 DataInput 中的 readFully
參數:
b - 用來接收寫入的 byte 陣列。
off - 向 b 進行寫入的開始位置。
len - 要讀取的最大 byte 數。
拋出:
IndexOutOfBoundsException - 如果 off 為負、len 為負或者 off + len 大於 b.length
NullPointerException - 如果 bnull
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readFully

void readFully(byte[] b)
               throws IOException
從串流中讀取 b.length 個位元組,並將其存儲到 b 中(從索引 0 開始)。如果到達串流末尾,則將拋出 EOFException

在進行讀取前,串流中的位偏移量被重置為 0。

指定者:
介面 DataInput 中的 readFully
參數:
b - 一個 byte 陣列。
拋出:
NullPointerException - 如果 bnull
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readFully

void readFully(short[] s,
               int off,
               int len)
               throws IOException
根據當前位元組順序從串流中讀取 len 個 short(有符號 16 位整數),並將其存儲到 s 中(從索引 off 開始)。如果到達串流末尾,則將拋出 EOFException

在進行讀取前,串流中的位偏移量被重置為 0。

參數:
s - 用來接收寫入的 short 陣列。
off - 向 s 進行寫入的開始位置。
len - 要讀取的最大 short 數。
拋出:
IndexOutOfBoundsException - 如果 off 為負、len 為負或者 off + len 大於 s.length
NullPointerException - 如果 snull
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readFully

void readFully(char[] c,
               int off,
               int len)
               throws IOException
根據當前位元組順序從串流中讀取 len 個 char(無符號 16 位整數),並將其存儲到 c 中(從索引 off 開始)。如果到達串流末尾,則將拋出 EOFException

在進行讀取前,串流中的位偏移量被重置為 0。

參數:
c - 用來接收寫入的 char 陣列。
off - 向 c 進行寫入的開始位置。
len - 要讀取的最大 char 數。
拋出:
IndexOutOfBoundsException - 如果 off 為負、len 為負或者 off + len 大於 c.length
NullPointerException - 如果 cnull
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readFully

void readFully(int[] i,
               int off,
               int len)
               throws IOException
根據當前位元組順序從串流中讀取 len 個 int(有符號 32 位整數),並將其存儲到 i 中(從索引 off 開始)。如果到達串流末尾,則將拋出 EOFException

在進行讀取前,串流中的位偏移量被重置為 0。

參數:
i - 用來接收寫入的 int 陣列。
off - 向 i 進行寫入的開始位置。
len - 要讀取的最大 int 數。
拋出:
IndexOutOfBoundsException - 如果 off 為負、len 為負或者 off + len 大於 i.length
NullPointerException - 如果 inull
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readFully

void readFully(long[] l,
               int off,
               int len)
               throws IOException
根據當前位元組順序從串流中讀取 len 個 long(有符號 64 位整數),並將其存儲到 l 中(從索引 off 開始)。如果到達串流末尾,則將拋出 EOFException

在進行讀取前,串流中的位偏移量被重置為 0。

參數:
l - 用來接收寫入的 long 陣列。
off - 向 l 進行寫入的開始位置。
len - 要讀取的最大 long 數。
拋出:
IndexOutOfBoundsException - 如果 off 為負、len 為負或者 off + len 大於 l.length
NullPointerException - 如果 lnull
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readFully

void readFully(float[] f,
               int off,
               int len)
               throws IOException
根據當前位元組順序從串流中讀取 len 個 float(32 位 IEEE 單精度浮點值),並將其存儲到 f 中(從索引 off 開始)。如果到達串流末尾,則將拋出 EOFException

在進行讀取前,串流中的位偏移量被重置為 0。

參數:
f - 用來接收寫入的 float 陣列。
off - 向 f 進行寫入的開始位置。
len - 要讀取的最大 float 數。
拋出:
IndexOutOfBoundsException - 如果 off 為負、len 為負或者 off + len 大於 f.length
NullPointerException - 如果 fnull
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readFully

void readFully(double[] d,
               int off,
               int len)
               throws IOException
根據當前位元組順序從串流中讀取 len 個 double(64 位 IEEE 雙精度浮點值),並將其存儲到 d 中(從索引 off 開始)。如果到達串流末尾,則將拋出 EOFException

在進行讀取前,串流中的位偏移量被重置為 0。

參數:
d - 用來接收寫入的 double 陣列。
off - 向 d 進行寫入的開始位置。
len - 要讀取的最大 double 數。
拋出:
IndexOutOfBoundsException - 如果 off 為負、len 為負或者 off + len 大於 d.length
NullPointerException - 如果 dnull
EOFException - 如果該串流在讀取所有位元組之前到達末尾。
IOException - 如果發生 I/O 錯誤。

getStreamPosition

long getStreamPosition()
                       throws IOException
返回串流的當前位元組位置。下一次讀取將從此偏移量開始。

返回:
一個套件含串流位置 long 值。
拋出:
IOException - 如果發生 I/O 錯誤。

getBitOffset

int getBitOffset()
                 throws IOException
以整數的形式返回當前位偏移量,該整數在 0 到 7 之間(包含兩者)。位偏移量通過調用 readBits 方法隱式地更新。值 0 表示所讀取位元組的最高有效位,值 7 表示所讀取位元組的最低有效位。

第一次打開串流時位偏移量被設置為 0,以後可以通過調用 seekskipBytes、或者任何 readreadFully 方法將其重置為 0。

返回:
一個 int,包含 0 到 7 之間(包含兩者)的位偏移量。
拋出:
IOException - 如果發生 I/O 錯誤。
另請參見:
setBitOffset(int)

setBitOffset

void setBitOffset(int bitOffset)
                  throws IOException
將位偏移量設置為 0 到 7 之間(包含兩者)的整數。不改變串流中由 getStreamPosition 返回的位偏移量。值 0 表示所讀取位元組的最高有效位,值 7 表示所讀取位元組的最低有效位。

參數:
bitOffset - 所需的偏移量,為 0 到 7 之間(包括兩者)的 int 的形式。
拋出:
IllegalArgumentException - 如果 bitOffset 不在 0 和 7(包括兩者)之間。
IOException - 如果發生 I/O 錯誤。
另請參見:
getBitOffset()

readBit

int readBit()
            throws IOException
從串流中讀取單個位元組,並以 int01)的形式返回該位元組。位偏移量將加 1,模數將減 8。

返回:
一個 int,包含 01
拋出:
EOFException - 如果該串流在讀取所有位之前到達末尾。
IOException - 如果發生 I/O 錯誤。

readBits

long readBits(int numBits)
              throws IOException
從串流中讀取位串 (bitstring) 並以 long 的形式返回,使第一個讀取的位成為輸出的最高有效位。在 getStreamPosition 指示的位元組中從 getBitOffset 給定的位開始讀取。位偏移量將增加 numBits,模數將減 8。

串流的位元組順序對此方法沒有任何影響。此方法返回值的建構方式相當於每次讀取一個位,然後將其移到返回值的右邊。如以下偽程式碼所示:

 long accum = 0L;
 for (int i = 0; i < numBits; i++) {
   accum <<= 1; // Shift left one bit to make room
   accum |= readBit();
 }
 
注意,如果使用了與網路位元組順序相反的順序(即 getByteOrder() == false),那麼 readBits(32) 的結果可能因此而不等於 readInt() 的結果。

如果在讀取了所有位前遇到串流末尾,則拋出 EOFException

參數:
numBits - 要讀取的位數,為 0 到 64 之間(包含兩者)的 int 形式。
返回:
long 形式的位串,最後讀取的位存儲在最低有效位中。
拋出:
IllegalArgumentException - 如果 numBits 不在 0 和 64 之間(包括兩者)。
EOFException - 如果該串流在讀取所有位之前到達末尾。
IOException - 如果發生 I/O 錯誤。

length

long length()
            throws IOException
返回串流的總長度(如果已知)。否則,返回 -1

返回:
一個 long,包含串流的長度(如果已知);否則返回 -1
拋出:
IOException - 如果發生 I/O 錯誤。

skipBytes

int skipBytes(int n)
              throws IOException
將串流位置向前移動給定的位元組數。此方法向前跳過的位元組數可能小於所請求的位元組數,例如,在到達串流末尾時。無論如何,將返回實際跳過的位元組數。在推進位置前,位偏移量被設置為 0。

指定者:
介面 DataInput 中的 skipBytes
參數:
n - 一個 int,它包含要跳過的位元組數。
返回:
一個 int,表示跳過的位元組數。
拋出:
IOException - 如果發生 I/O 錯誤。

skipBytes

long skipBytes(long n)
               throws IOException
將串流位置向前移動給定的位元組數。此方法等同於 skipBytes(int),唯一的不同在於它允許更大的跳躍距離。

參數:
n - 一個 long,它包含要跳過的位元組數。
返回:
表示跳過的位元組數的 long
拋出:
IOException - 如果發生 I/O 錯誤。

seek

void seek(long pos)
          throws IOException
將當前串流位置設置為所需的位置。下一次讀取將在此位置上進行。位偏移量被設置為 0。

如果 pos 小於刷新位置(由 getflushedPosition 返回),那麼將拋出 IndexOutOfBoundsException

尋找檔案結束標記的後面是合法的,只有在該處執行讀取時才拋出 EOFException

參數:
pos - 一個 long,它包含所需的檔案指針位置。
拋出:
IndexOutOfBoundsException - 如果 pos 小於刷新位置。
IOException - 如果發生任何 I/O 錯誤。

mark

void mark()
標記串流中某個位置,供後續調用 reset 時返回。與標準 InputStream 不同的是,所有的 ImageInputStream 都支持標記操作。此外,還可以隨意巢狀對 markreset 的調用。

ReaderInputStream 介面宣告的 mark 方法不同,此方法不使用任何 readLimit 參數。調用 mark 後可以讀取任意數量的資料。

readBits 方法使用的位位置可通過每次調用 markreset 來保存和恢復。

注意,ImageReader 調用 flushBefore 作為讀取操作的一部分是有效的。因此,如果應用程序向 ImageReader 傳遞該串流前調用 mark,則應用程序不應該假定標記位置在讀取操作完成後仍保持有效。


reset

void reset()
           throws IOException
返回在最近一次非比對地調用 mark 時指向上一個位置(包括位偏移量)的串流指針。

調用 reset 而沒有相應地調用 mark 沒有任何效果。

如果上一個標記位置位於串流的丟棄部分,則拋出 IOException

拋出:
IOException - 如果發生 I/O 錯誤。

flushBefore

void flushBefore(long pos)
                 throws IOException
丟棄所指示位置之前的串流初始部分。試圖尋找串流的刷新部分中的偏移量將導致拋出 IndexOutOfBoundsException

調用 flushBefore 可允許實作此介面的類別釋放存儲串流中的資料所使用的資源,如記憶體和磁碟空間。

參數:
pos - 一個 long,它包含要刷新的串流前綴的長度。
拋出:
IndexOutOfBoundsException - 如果 pos 位於串流的刷新部分或當前串流位置的後面。
IOException - 如果發生 I/O 錯誤。

flush

void flush()
           throws IOException
丟棄當前串流位置之前的串流初始部分。等效於 flushBefore(getStreamPosition())

拋出:
IOException - 如果發生 I/O 錯誤。

getFlushedPosition

long getFlushedPosition()
返回串流中可以執行尋找的最早位置。返回值將是所有傳入 flushBefore 上一次調用的值中的最大值。

返回:
用於尋找的最早的合法位置(long 形式)。

isCached

boolean isCached()
如果此 ImageInputStream 本身為了允許逆向尋找而快取記憶體了資料,則返回 true。應用程序可以根據此方法來決定刷新的頻率以及是否刷新以保留快取記憶體資源。

返回:
如果此 ImageInputStream 快取記憶體資料,則返回 true
另請參見:
isCachedMemory(), isCachedFile()

isCachedMemory

boolean isCachedMemory()
如果此 ImageInputStream 本身為了允許逆向尋找而快取記憶體了資料,並將其保存在主存中,則返回 true。應用程序可以根據此方法來決定刷新的頻率以及是否刷新以保留快取記憶體資源。

返回:
如果此 ImageInputStream 在主存中快取記憶體資料,則返回 true
另請參見:
isCached(), isCachedFile()

isCachedFile

boolean isCachedFile()
如果此 ImageInputStream 本身為了允許逆向尋找而快取記憶體了資料,並且將其保存在臨時檔案中,則返回 true。應用程序可以根據此方法來決定刷新的頻率以及是否刷新以保留快取記憶體資源。

返回:
如果此 ImageInputStream 在臨時檔案中快取記憶體資料,則返回 true
另請參見:
isCached(), isCachedMemory()

close

void close()
           throws IOException
關閉串流。試圖存取已經關閉的串流將導致 IOException 或錯誤行為。調用此方法可允許實作此介面的類別釋放與串流關聯的資源,如記憶體、磁碟空間或檔案描述符。

拋出:
IOException - 如果發生 I/O 錯誤。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only