簡體   English   中英

inputstream.read在Java中讀取多少數據

[英]How much data does inputstream.read reads in java

我正在查看inputstream對象的read方法的定義,由於每次都讀取“讀取一些字節”的數據,我感到困惑

public int read(byte[] b)
         throws IOException
Reads some number of bytes from the input stream and stores them into the buffer array b. The number of bytes actually read is returned as an integer. This method blocks until input data is available, end of file is detected, or an exception is thrown.

可以說我有一個大小為200的緩沖區數組,輸入流中的數據為100字節。 是否可以保證inputStream.read獲得所有100個字節?

該接口的全部要點(或者確切地說是抽象類):您絕對不能依賴於假設讀取了多少字節。 始終總是必須檢查該方法的返回值才能知道。

背景:該接口有許多不同的實現。 我的某些緩沖區,有些可能沒有。 一些讀取“固定”輸入(可能從內存中的現有數據)。 可能有人會決定給您提供流向Internet的流,下載10 GB的文件,然后開始向您發送一個字節。

您唯一知道的是:方法返回

讀入緩沖區的總字節數

故事結局。

雖然從InputStream和具體實現中進行讀取時不能保證任何事情 (請參見throws IOException部分),是的,如果您有一個緩沖區,其大小大於讀取的數據,則應將所有數據讀入該緩沖區,其余byte被讀入。不會寫入緩沖區中的值,因此將其保留為默認原始值0

當從InputStream傳遞到OutputStream時,這也是一個警告。

流結束時, read方法將返回readbyte數或-1

這樣可以指示“精確副本”需要寫入多少緩沖區。

文檔在這里

InputStream是一個抽象類 (不是“對象”)。 因此,它僅指定一個接口 ,而不是一個實現 ,因此實現的詳細信息取決於您使用的實際非抽象子類。

不,沒有保證人。 read(byte b[])只是委派給具有三個參數read(byte b[], int off, int len)read方法,如下所示:

return read(b, 0, b.length);

該方法的文檔內容如下:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM