處理流:增強功能,提供性能,節點流之上
緩衝流
字節緩衝流
BufferedInputStream 爲另一個輸入流添加一些功能,即緩衝輸入以及支持 mark 和 reset 方法的能力。在創建
BufferedInputStream
時,會創建一個內部緩衝區數組。在讀取或跳過流中的字節時,可根據需要從包含的輸入流再次填充該內部緩衝區,一次填充多個字節。mark
操作記錄輸入流中的某個點,reset 操作使得在從包含的輸入流中獲取新字節之前,再次讀取自最後一次 mark 操作後讀取的所有字節。BufferedOutputStream
該類實現緩衝的輸出流。通過設置這種輸出流,應用程序就可以將各個字節寫入底層輸出流中,而不必針對每次字節寫入調用底層系統
字符緩衝流
BufferedReader 從字符輸入流中讀取文本,緩衝各個字符,從而實現字符、數組和行的高效讀取。通常,Reader 所作的每個讀取請求都會導致對底層字符或字節流進行相應的讀取請求。因此,建議用 BufferedReader 包裝所有其 read()操作可能開銷很高的 Reader(如 FileReader 和InputStreamReader)。如果沒有緩衝,則每次調用read() 或 readLine() 都會導致從文件中讀取字節,並將其轉換爲字符後返回,而這是極其低效的
BufferedWriter 將文本寫入字符輸出流,緩衝各個字符,從而提供單個字符、數組和字符串的高效寫入。
文件複製
public class CopyFileDemo {
public static void main(String[] args){
}
public void copyFile(String souce,String dest) throws Exception{
File sourcefile = new File(souce);
File destfile = new File(dest);
InputStream is = new BufferedInputStream(new FileInputStream(sourcefile));
OutputStream os = new BufferedOutputStream(new FileOutputStream(destfile));
int len;
byte[] flush = new byte[1024];
while ((len=is.read(flush))!=-1){
os.write(flush,0,flush.length);
}
os.flush();
is.close();
os.close();
}
}
轉換流
InputStreamReader
public class InputStreamReaderextends Reader
常用構造方法
InputStreamReader(InputStream in)
InputStreamReader(InputStream in,Charset cs);
InputStremReader(InputStream in,String charsetName)
常用方法
String getEncoding() //返回此流使用的字符編碼的名稱
int read() //讀取單個字符
int read(char[] cbuf,int offset,int length)
InputStreamReader 是字節流通向字符流的橋樑:它使用指定的charset讀取字節並將其解碼爲字符。每次調用 InputStreamReader 中的一個 read() 方法都會導致從底層輸入流讀取一個或多個字節。要啓用從字節到字符的有效轉換,可以提前從底層流讀取更多的字節,使其超過滿足當前讀取操作所需的字節。爲了提高效率,可以考慮在BufferedReader內包裝InputStreamReader,例如:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
public class Conver {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("D:/io/a.txt")),"UTF-8"));
String info = null;
while(null != (info = br.readLine())){
System.out.println(info);
}
br.close();
}
}
OutputStreamWriter
OutputStreamWriter 是字符流通向字節流的橋樑,每次調用 write() 方法都會導致在給定字符(或字符集)上調用編碼轉換器。在寫入底層輸出流之前,得到的這些字節將在緩衝區中累積。爲了獲得最高效率,可考慮將 OutputStreamWriter 包裝到 BufferedWriter 中,以避免頻繁調用轉換器。
Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
常用構造方法
OutputStreamWriter(OutputStream out) //創建使用默認字符編碼的OutputStreamWriter
OutputStreamWriter(OutputStream out,Charset cs) //創建使用給定字符集的OutputStreamWriter
常用方法
void close()
void flush()
void write(char[] cbuf,int off,int len) //寫入字符數組的某一部分
write(int c) //寫入單個字符
write(String str,int off,int len) //寫入字符串的某一部分