1.BufferedInputStream和BufferedOutputStream
(1)沒有緩沖區,去復制文件,如何操作?
【案例1】復制一個大文件
思路:
(1)創建一個文件輸入流對象FileInputStream,引用要復制的文件。
(2)無法一次性讀入,讀取這個文件的內容,到緩沖區。所以建立一個字節數組。
(3)創建一個文件輸出流對象FileOutputStream,引用到目標文件。
(4)將緩沖區內容寫入到目標文件。
BufferedInputStream和BufferedOutputStream的優勢:
降低磁盤IO操作次數;帶有緩沖區。
BufferedInputStream
構造函數:
new BufferedInputStream(InputStream):不指定緩沖區大小,默認是8192
new BufferedInputStream(InputStream,Int),參數2指定緩沖區大小
api:
int available(),返回數據流有效的長度;
void close();關閉
int read();從緩沖區中讀取
int read(byte[] b,int off,int len),從數組b中off位置,讀len個;
void reset();重置
long skip(long n);跳過多少個字節。
BufferedOutputStream
構造函數:
new BufferedOutputStream(outputstream)
new BufferedOutputStream(outputstream,size)
api:
void flush();
write(byte b);寫入一個字節
write(byte[] b,int off,int len),從b中獲取,寫入開始位置為off,寫len個。
【案例】使用BufferedInputStream和BufferedOutputStream復制文件。
思路:
2.BufferedReader和BufferedWriter
字符流;帶有緩沖區;
BufferedReader
構造方法:
new BufferedReader(Reader in)
new BufferedReader(Reader in,int size)
api:
void close();
int read();
int read(char[] cbuf,int off,int len)
String readLine();
BufferedWriter:
構造方法:
new BufferedWriter(Writer out)
new BufferedReader(Writer out ,int size)
api:
void close()
void flush()
void new Line();寫入一個換行符
void write(int c)
void write(char cbuf[],int off,int len)
void write(String s,int off,int len)
【案例】
3.InputStreamReader和OutputStreamWriter
都是轉換流,將字節流轉換成字符流;或者將字符流轉換成字節流
OutputStreamWriter構造方法:
new OutputStreamWriter(OutputStream)
new OutputStreamWriter(OutputStream,charsetName),指定字符集編碼
api:
void write(int c);
void write(String str,int off,int len)
void flush();
InputStreamReader構造方法
new InputStreamReader(inputStream)
new InputStreamReader(inputStream,charsetName),指定字符集編碼
api:
int read()
int read(char[] cbuf)
【案例1】
【案例2】
步驟:
(1)使用記事本寫入文件,內容中文。
(2)在代碼中使用gbk來讀取文件信息。保證中文不亂碼。
【作業】
把昨天出題,判斷是否正確,使用BufferedInputStream和BufferedOutputStream改寫。