---恢復內容開始---
一.流:一維單方向
1. 一維:即只需要給出一個參數就可以確定在流中的位置
2. 單方向:只能從一個方向流向另一個方向:要么是讀,要么是寫,不能在同一個流中讀寫並行。
那么想要既讀又寫,那么就需要開兩個流。
例如:System.out.println()中的out就是一個可以用來做輸出的流。
3. InputStream:從inputstream中按字節為單位讀取,標記,作為返回值等。
1)int read() 、返回獨到的文件的位置,若讀到了末尾,返回-1;
read(byte[], int off, int len)、
read(byte b[])
2)int available()
3)mark()、reset()......
注:所有的read函數都是按照字節為單位進行讀入的。
4. OutoutStream:
int write()
write(byte[])
write(byte[], int off, int len)
write的性質和read類似
二.文件流:FileInputStream and FileOutputStream
但凡是read或是write函數都是只能按字節為單位進行讀取

1 //聲明 2 FileOutputStream out = new FileOutputStream(filepath); 3 out.write(something); 4 out.close();
三.過濾器流:
1. 如果想要從文件中讀取一個int, 或是String 或是其他, 而不只是byte的二進制數據,那么就要用到過濾器流
2. 在已有的文件流的基礎上一層層的增加過濾器,我們可以利用這些過濾器實現那些我們可能需要的功能.

1 //通過DateOutputStream可以實現完成基礎數據類型的寫操作 2 //再將其存入到一層緩沖區流中 3 //最后通過文件流實現輸出 4 DateOutputStream out = new DataOutputStream( 5 new BufferedOutputStream( 6 new FileOutputStream(filepath))); 7 int i = 0x666666; 8 out.writeInt(i); 9 out.close(); 10 //同理,我們可以實現一個基礎數據類型的讀入流: 11 //其實現原理正好為輸出流的反向過程 12 DataInputStream in = new DataInputStream( 13 new BufferedInputStream( 14 new FileInputStream(filepath))); 15 int j = in.readInt(); 16 System.out.println(j);
3. 文本輸入輸出:Reader and Writer(處理unicode 字符)

1 //我們使用writer實現文本的輸出 2 //通過一個BufferedWriter實現了一個緩沖區(可有可無) 3 //OutputStreamWriter是Stream和Writer之間的橋梁,幫助了我們實現了文本到二進制的轉換 4 //最后基於一個實際的文件輸出流FileOutputStream,實現寫功能 5 PrintWriter pw = new PrintWriter( 6 new BufferedWriter( 7 new OutputStreamWriter( 8 new FileOutputStream("try.txt")))); 9 String txt = "Hello World!"; 10 pw.println(txt); 11 pw.close(); 12 //文本讀出 13 //原理類似,過程相反 14 BufferedReader in = new BufferedReader( 15 new InputStreamReader( 16 new FileInputStream(filepath))); 17 // 18 String line; 19 while((line = in.readLine()) != null) 20 System.out.println(line);
四.編碼問題:
1. 當從文件中讀入數據並輸出后,發現全是亂碼,那么說明你讀入的格式有問題。
2. 默認情況下,函數是以GB(國標碼)形式讀入的。
3. 這種情況下我們需要更改讀入的編碼格式:
InputStreamReader()中可以有兩個參數,第一個參數:具體的數據讀入流, 第二個參數:以字符串的形式生命數據讀入類型
五.總結:
以上參考自中國大學mooc, 翁愷老師的java語言進階
圖片來自於中國大學mooc, 翁愷老師的java語言進階
做個宣傳:微信公眾號:計算機技術雜談。
目前里面介紹:NLP, 大數據, 視聽覺信號處理的基本知識。每日更新一篇。大家有興趣的可以關注一下。二維碼如下:做個宣傳:微信公眾號:計算機技術雜談。
目前里面介紹:NLP, 大數據, 視聽覺信號處理的基本知識。每日更新一篇。大家有興趣的可以關注一下。二維碼如下:省賽
---恢復內容結束---