今天回顧總結了一下,Java IO裡面的
InputStream、InputStreamReader、BufferedReader用法差別
- 位元組流
是位元組輸入流的所有類的超類,一般我們使用它的子類,如FileInputStream等InputStream
是位元組輸出流的所有類的超類,一般我們使用它的子類,如FileOutputStream等OutputStream
- 字元流
是字元輸入流的所有類的超類,Reader
是字元輸出流的所有類的超類Writer
、InputStreamReader
OutputStreamWriter
是子類,是位元組流通向字元流的橋梁,它将位元組流轉換為字元流
還有一個類
繼承自FileReader
,可以通過傳入一個InputStreamReader
快速建構字元流檔案名
- 緩沖流
BufferedReader
由Reader類擴充而來,提供通用的緩沖方式文本讀取,readLine讀取一個文本行,
從字元輸入流中讀取文本,緩沖各個字元,進而提供字元、數組和行的高效讀取
BufferedWriter
由Writer 類擴充而來,提供通用的緩沖方式文本寫入, newLine使用平台自己的行分隔符,
将文本寫入字元輸出流,緩沖各個字元,進而提供單個字元、數組和字元串的高效寫入
自己寫的執行個體操作代碼
- 位元組流讀取
@Test
public void inputStreamTest() throws IOException {
FileInputStream fileInputStream = new FileInputStream("F:\\idea-Java\\feifei\\test.txt");
// 位元組流讀取
byte[] bytes = new byte[1024];
int len;
// 讀取檔案内容到bytes數組中,一次讀取可以容納1024個位元組
while ((len = fileInputStream.read(bytes)) != -1) {
// 從0開始截取位元組數組的len長度的位元組
System.out.println(new String(bytes, 0, len, "UTF-8"));
}
fileInputStream.close();
}
- 字元流讀取
@Test
public void inputStreamReadTest() throws IOException {
FileInputStream fileInputStream = new FileInputStream("F:\\idea-Java\\Alibaba\\test.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
int len;
// 字元流讀取檔案内容,預設一個字元一個字元的讀
while ((len = inputStreamReader.read()) != -1) {
// 從0開始截取位元組數組的len長度的位元組
System.out.println((char) len);
}
fileInputStream.close();
inputStreamReader.close();
}
也可以多個多個字元讀取,跟位元組流類似,定義一個char數組
- 自帶緩沖區的字元流,按行讀取
@Test
public void bufferedReadTest() throws IOException {
FileInputStream fileInputStream = new FileInputStream("F:\\idea-Java\\Alibaba\\test.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String len;
// 字元緩沖流流讀取檔案内容,通常使用的是一行一行的讀
while ((len = bufferedReader.readLine()) != null) {
// 從0開始截取位元組數組的len長度的位元組
System.out.println(len);
}
fileInputStream.close();
inputStreamReader.close();
bufferedReader.close();
}