天天看點

Java緩沖位元組輸入流BufferedInputStream

緩沖:緩和沖擊,記憶體中預留了一部分空間,這些空間用來緩沖輸入或輸出的資料,叫做緩沖區。

使用緩沖區可以提高程式讀寫效率,因為資料讀寫速度和處理速度不平衡,讀寫速度很慢,如果太多次讀寫資料,會浪費大量的時間。

BufferedInputStream會預先讀取一段原始資料放入緩沖區中,使用read方法時讀取的是緩沖區中的資料,如果讀取的資料超過了緩沖區的資料範圍,BufferedInputStream會重新從原始資料中讀取下一段資料放入緩沖區。

使用緩沖區可以避免大量的磁盤IO。

不用緩沖區的類(如FileInputStream)的read方法是即時讀取,每一次讀取操作都是一次磁盤IO,非常耗時。

使用緩沖區後read方法操作緩沖區中的資料,減少了IO次數,提高效率。

預設緩沖區大小是8K。

private static int DEFAULT_BUFFER_SIZE = 8192;

常用方法 描述
BufferedInputStream(InputStream in) 構造方法,傳入InputStream對象,預設緩沖區大小
BufferedInputStream(InputStream in, int size) 構造方法,傳入InputStream對象,緩沖區大小設定為size
int read() 從流中讀取單個位元組,傳回0~255之間的位元組值,如果到達流末尾且沒有可用位元組,傳回-1
int read(byte b[]) 父類FilterInputStream的方法,從流中讀取最多b.length個位元組,存入數組b中,傳回實際讀取的位元組數,如果到達流末尾且沒有可用位元組,傳回-1
int read(byte b[], int off, int len) 從流中讀取最多len個位元組,從b[off]開始存入數組b中,傳回實際讀取的位元組數,如果到達流末尾且沒有可用位元組,傳回-1
long skip(long n) 從流中跳過n個位元組的資料
int available() 傳回流中剩餘位元組數
void mark(int readlimit) 标記目前位置,設定最多readlimit位元組後失效,失效後不可跳轉到此标記
void reset() 将目前流重新定位到最新标記時的位置
boolean markSupported() 判斷目前流是否支援mark方法
void close() 關閉輸入流,釋放相關資源

基類:InputStream

常見IO流:OutputStream、Reader、Writer