鴻蒙OS InputStream

2022-10-20 14:15 更新

InputStream

java.lang.Object

|---java.io.InputStream

public abstract class InputStream
extends Object
implements Closeable

這個抽象類是代表字節(jié)輸入流的所有類的超類。

需要定義 InputStream 子類的應用程序必須始終提供返回下一個輸入字節(jié)的方法。

Since:

JDK1.0

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
InputStream()

方法總結(jié)

修飾符和類型 方法 描述
int available() 返回可以從此輸入流中讀取(或跳過)的字節(jié)數(shù)的估計值,而不會被下一次調(diào)用此輸入流的方法阻塞。
void close() 關閉此輸入流并釋放與該流關聯(lián)的所有系統(tǒng)資源。
void mark(int readlimit) 標記此輸入流中的當前位置。
boolean markSupported() 測試此輸入流是否支持 mark 和 reset 方法。
abstract int read() 從輸入流中讀取數(shù)據(jù)的下一個字節(jié)。
int read(byte[] b) 從輸入流中讀取一些字節(jié)并將它們存儲到緩沖區(qū)數(shù)組 b.
int read(byte[] b, int off, int len) 從輸入流中讀取最多 len 個字節(jié)的數(shù)據(jù)到一個字節(jié)數(shù)組中。
void reset() 將此流重新定位到最后一次在此輸入流上調(diào)用標記方法時的位置。
long skip(long n) 跳過并丟棄此輸入流中的 n 字節(jié)數(shù)據(jù)。
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

構(gòu)造函數(shù)詳細信息

InputStream

public InputStream()

方法詳情

read

public abstract int read() throws IOException

從輸入流中讀取數(shù)據(jù)的下一個字節(jié)。 值字節(jié)作為 int 返回,范圍為 0 到 255。如果由于到達流的末尾而沒有可用的字節(jié),則返回值 -1。 此方法會一直阻塞,直到輸入數(shù)據(jù)可用、檢測到流結(jié)束或引發(fā)異常。

子類必須提供此方法的實現(xiàn)。

返回:

數(shù)據(jù)的下一個字節(jié),如果到達流的末尾,則為 -1。

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯誤。

read

public int read(byte[] b) throws IOException

從輸入流中讀取一些字節(jié)并將它們存儲到緩沖區(qū)數(shù)組 b. 實際讀取的字節(jié)數(shù)以整數(shù)形式返回。 在輸入數(shù)據(jù)可用、檢測到文件結(jié)尾或引發(fā)異常之前,此方法會一直阻塞。

如果 b 的長度為零,則不讀取任何字節(jié)并返回 0; 否則,將嘗試讀取至少一個字節(jié)。 如果由于流位于文件末尾而沒有可用字節(jié),則返回值 -1; 否則,至少讀取一個字節(jié)并將其存儲到 b 中。

讀取的第一個字節(jié)存儲在元素 b[0] 中,下一個字節(jié)存儲在 b[1] 中,依此類推。 讀取的字節(jié)數(shù)最多等于 b 的長度。 設 k 為實際讀取的字節(jié)數(shù); 這些字節(jié)將存儲在元素 b[0] 到 b[k-1] 中,而元素 b[k] 到 b[b.length-1] 不受影響。

InputStream 類的 read(b) 方法與以下效果相同:

 read(b, 0, b.length) 

參數(shù):

參數(shù)名稱 參數(shù)描述
b 讀取數(shù)據(jù)的緩沖區(qū)。

返回:

讀入緩沖區(qū)的總字節(jié)數(shù),如果由于到達流的末尾而沒有更多數(shù)據(jù),則為 -1。

Throws:

Throw名稱 Throw描述
IOException 如果由于文件結(jié)尾以外的任何原因無法讀取第一個字節(jié),如果輸入流已關閉,或者發(fā)生其他一些 I/O 錯誤。
NullPointerException 如果 b 為空。

read

public int read(byte[] b, int off, int len) throws IOException

從輸入流中讀取最多 len 個字節(jié)的數(shù)據(jù)到一個字節(jié)數(shù)組中。嘗試讀取多達 len 個字節(jié),但可能會讀取較小的字節(jié)數(shù)。實際讀取的字節(jié)數(shù)以整數(shù)形式返回。

在輸入數(shù)據(jù)可用、檢測到文件結(jié)尾或引發(fā)異常之前,此方法會一直阻塞。

如果 len 為零,則不讀取任何字節(jié)并返回 0;否則,將嘗試讀取至少一個字節(jié)。如果由于流位于文件末尾而沒有可用字節(jié),則返回值 -1;否則,至少讀取一個字節(jié)并將其存儲到 b 中。

讀取的第一個字節(jié)存儲在元素 b[off] 中,下一個字節(jié)存儲在 b[off+1] 中,依此類推。讀取的字節(jié)數(shù)最多等于 len。設 k 為實際讀取的字節(jié)數(shù);這些字節(jié)將存儲在元素 b[off] 到 b[off+k-1] 中,而元素 b[off+k] 到 b[off+len-1] 不受影響。

在每種情況下,元素 b[0] 到 b[off] 和元素 b[off+len] 到 b[b.length-1] 都不受影響。

InputStream 類的 read(b, off, len) 方法只是重復調(diào)用方法 read()。如果第一個此類調(diào)用導致 IOException,則該異常會從對 read(b, off, len) 方法的調(diào)用中返回。如果對 read() 的任何后續(xù)調(diào)用導致 IOException,則捕獲該異常并將其視為文件結(jié)尾;到目前為止讀取的字節(jié)存儲在 b 中,并返回發(fā)生異常之前讀取的字節(jié)數(shù)。此方法的默認實現(xiàn)會阻塞,直到讀取了請求的輸入數(shù)據(jù)量 len、檢測到文件結(jié)尾或拋出異常。鼓勵子類提供此方法的更有效實現(xiàn)。

參數(shù):

參數(shù)名稱 參數(shù)描述
b 讀取數(shù)據(jù)的緩沖區(qū)。
off 數(shù)組 b 中寫入數(shù)據(jù)的起始偏移量。
len 要讀取的最大字節(jié)數(shù)。

返回:

讀入緩沖區(qū)的總字節(jié)數(shù),如果由于到達流的末尾而沒有更多數(shù)據(jù),則為 -1。

Throws:

Throw名稱 Throw描述
IOException 如果由于文件結(jié)尾以外的任何原因無法讀取第一個字節(jié),或者輸入流已關閉,或者發(fā)生其他一些 I/O 錯誤。
NullPointerException 如果 b 為空。
IndexOutOfBoundsException 如果 off 為負數(shù),len 為負數(shù),或者 len 大于 b.length - off

skip

public long skip(long n) throws IOException

跳過并丟棄此輸入流中的 n 字節(jié)數(shù)據(jù)。 由于各種原因,skip 方法最終可能會跳過一些較小的字節(jié)數(shù),可能是 0。這可能是由許多條件中的任何一個引起的; 在跳過 n 個字節(jié)之前到達文件末尾只是一種可能性。 返回實際跳過的字節(jié)數(shù)。 如果 n 為負數(shù),則 InputStream 類的 skip 方法始終返回 0,并且不跳過任何字節(jié)。 子類可能以不同方式處理負值。

此類的 skip 方法創(chuàng)建一個字節(jié)數(shù)組,然后重復讀取它,直到讀取 n 個字節(jié)或到達流的末尾。 鼓勵子類提供此方法的更有效實現(xiàn)。 例如,實現(xiàn)可能取決于尋找的能力。

參數(shù):

參數(shù)名稱 參數(shù)描述
n 要跳過的字節(jié)數(shù)。

返回:

跳過的實際字節(jié)數(shù)。

Throws:

Throw名稱 Throw描述
IOException 如果流不支持查找,或者發(fā)生其他一些 I/O 錯誤。

available

public int available() throws IOException

返回可以從此輸入流中讀取(或跳過)的字節(jié)數(shù)的估計值,而不會被下一次調(diào)用此輸入流的方法阻塞。下一次調(diào)用可能是同一個線程或另一個線程。單次讀取或跳過這么多字節(jié)不會阻塞,但可能會讀取或跳過更少的字節(jié)。

請注意,雖然 InputStream 的某些實現(xiàn)會返回流中的字節(jié)總數(shù),但許多不會。使用此方法的返回值來分配旨在保存此流中所有數(shù)據(jù)的緩沖區(qū)是不正確的。

如果此輸入流已通過調(diào)用 close() 方法關閉,則此方法的子類的實現(xiàn)可以選擇拋出 IOException。

InputStream 類的可用方法總是返回 0。

這個方法應該被子類覆蓋。

返回:

可以在沒有阻塞的情況下從此輸入流中讀?。ɑ蛱^)的字節(jié)數(shù)的估計值,或者當它到達輸入流的末尾時為 0。

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯誤。

close

public void close() throws IOException

關閉此輸入流并釋放與該流關聯(lián)的所有系統(tǒng)資源。

InputStream 的 close 方法什么也不做。

指定者:

在接口 AutoCloseable 中關閉

指定者:

在接口Closeable中關閉

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯誤。

mark

public void mark(int readlimit)

標記此輸入流中的當前位置。 對 reset 方法的后續(xù)調(diào)用將此流重新定位到最后標記的位置,以便后續(xù)讀取重新讀取相同的字節(jié)。

readlimit 參數(shù)告訴此輸入流允許在標記位置無效之前讀取那么多字節(jié)。

mark 的一般約定是,如果方法 markSupported 返回 true,則流以某種方式記住調(diào)用 mark 之后讀取的所有字節(jié),并準備好在調(diào)用方法 reset 時再次提供這些相同的字節(jié)。 但是,如果在調(diào)用 reset 之前從流中讀取了超過 readlimit 個字節(jié),則流根本不需要記住任何數(shù)據(jù)。

標記關閉的流不應對流產(chǎn)生任何影響。

InputStream 的mark 方法什么都不做。

參數(shù):

參數(shù)名稱 參數(shù)描述
readlimit 在標記位置無效之前可以讀取的最大字節(jié)數(shù)。

reset

public void reset() throws IOException

將此流重新定位到最后一次在此輸入流上調(diào)用標記方法時的位置。

重置的一般合約是:

  • 如果方法 markSupported 返回 true,則:
    • 如果自創(chuàng)建流以來尚未調(diào)用方法標記,或者自上次調(diào)用標記以來從流中讀取的字節(jié)數(shù)大于上次調(diào)用時標記的參數(shù),則可能會引發(fā) IOException。
    • 如果沒有拋出這樣的 IOException,則流將被重置為這樣的狀態(tài),即自最近一次調(diào)用 mark(或自文件開始,如果尚未調(diào)用 mark)讀取的所有字節(jié)將被重新提供給后續(xù) read 方法的調(diào)用者,后跟任何字節(jié),否則在調(diào)用重置時將成為下一個輸入數(shù)據(jù)。
  • 如果方法 markSupported 返回 false,則:
    • 對 reset 的調(diào)用可能會引發(fā) IOException。
    • 如果未拋出 IOException,則流將重置為固定狀態(tài),該狀態(tài)取決于輸入流的特定類型及其創(chuàng)建方式。 將提供給 read 方法的后續(xù)調(diào)用者的字節(jié)取決于輸入流的特定類型。

InputStream 類的方法 reset 除了拋出一個 IOException 之外什么都不做。

Throws:

Throw名稱 Throw描述
IOException 如果此流尚未標記或標記已失效。

markSupported

public boolean markSupported()

測試此輸入流是否支持 mark 和 reset 方法。 是否支持標記和重置是特定輸入流實例的不變屬性。 InputStream 的 markSupported 方法返回 false。

返回:

如果此流實例支持 mark 和 reset 方法,則為 true; 否則為 false。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號