-
節點流
1.字節流:
輸入流:InputStream:read(byte[]);close();子類----->FileInputStream
輸出流:OutputStream:write(byte[]);flush();close() ;子類---->FileOutputStream
2.字符流
輸入流:Reader:read(char[]);read(char[], int, int);close();子類----->FileReader
輸出流:Writer:write(char[]);write(char[], int, int);write(String, int, int);write(String);flush();close(); 子類---->FileWriter
-
緩衝流:提高流的效率跟性能
在以後的開發中建議在節點流之上套一層緩衝流提高性能
1.字節流:
1.字節緩衝輸入流:BufferedInputStrean; 2.字節緩衝輸出流:BufferedOutputStream
2.字符流:
1.字符緩衝輸入流:BufferedReader:readLine() ;2.字符緩衝輸出流:BufferedWriter:newLine();
-
轉換流:字節流轉換字符流,處理亂碼編碼集或解碼集
編碼與解碼的概念:
編碼:字符-------編碼字符集------>二進制(字節); 解碼:二進制(字節)------解碼字符集------>字符
亂碼:1.編碼與解碼不統一;2.字符缺少,長度丟失
轉換流:1.輸出流:OutputStreamWriter(編碼) 2.輸入流:InputStreamReader(解碼)
//以讀取爲例說明InputStreamReader的用法,輸出同理
//正常情況下是這樣定義一個讀取緩衝流。
//Reader類是接口。只能通過子類FileReader來定義。BufferedReader 類的readLine不是重寫父類的方法。
//而是BufferedReader新增的方法。所以不能通過多態的形式來聲明bf。
//因爲解碼只能對字節進行解碼,但是這種字符的讀取方式沒法進行解碼,
//所以我們只能底層通過字節的讀取方式來進行解碼操作
BufferedReader bf =new BufferedReader(new FileReader(new File("")));
//2.改進後的聲明
BufferedReader bf=new BufferedReader(new FileInputStream(new File("")));
//如果在編譯器上面寫上這句代碼就會發現,這個是一個錯誤的代碼。
//底層的字節流,緩衝流是沒法通過字符的形式讀取的。所以有了一下的改進方式
//2.通過轉換流完成字節到字符的轉換,並且實現解碼操作
BufferedReader bf=new BufferedReader( //通過緩衝流進行分裝,更容易讀取
new InputStreamReader( //關鍵步驟:通過轉換流完成底層字節流到字符
//流的轉換與解碼操作
new FileInputStream( //通過字節流的方式讀取文件
new File("")),"utf-8"));//將文件跟程序綁定
-
其他流
-
節點流
字節數組輸入流:ByteArrayInputStream: 字節數組輸出流:ByteArrayOutputStream
//ByteArrayInputStream用法
public static void read() throws IOException {
String msg ="今天第三天";
//內存中轉化成Bytes數據
byte[] src =msg.getBytes();
//沒有新增方法,可以使用多態
InputStream is =new BufferedInputStream(new ByteArrayInputStream(src));
//設置一個緩衝區大小1024
byte[] flush =new byte[1024];
//讀取長度
int len=0;
//循環讀取
while(-1!=(len=is.read(flush))) {
System.out.println(new String(flush,0,len));
}
is.close();
}
//ByteArrayOutputStream的用法
public static void write() throws IOException {
//設置目的,字節數組
byte[] dest;
ByteArrayOutputStream bos =new ByteArrayOutputStream();
String msg ="今天第三天";
byte[] src =msg.getBytes();
//寫入流管道中
bos.write(src, 0, src.length);
//目的地處獲得數據
dest=bos.toByteArray();
bos.close();
System.out.println(new String(dest));
}