1. 程式人生 > >javaSE (三十一)IO字元流、用字元流.nextLine()反轉文字、轉換流記憶體示意圖

javaSE (三十一)IO字元流、用字元流.nextLine()反轉文字、轉換流記憶體示意圖

1、位元組流和字元流的區別
其實字元流和位元組流沒多大區別,字元流也可以拷貝檔案,但不推薦使用,因為讀取的時候位元組轉字元,然後字元還是要轉位元組 (用碼錶來進行位元組和字元之間的轉換

2、什麼時候用到字元流?
“只讀或者只寫的時候”

程式需要讀取一段文字,或者需要寫出一段文字的時候可以用字元流
讀取的時候按照字元大小讀取的,不會出現半個中文這陣種情況

寫出的時候可以直接將字串寫出,不用轉換成字元陣列

3、字元流只能拷貝純文字的檔案

原因:位元組轉換成字元,按照碼錶,如果不是純文字,就找不到對應的字元(比如圖片、mp3),就不能轉換了

4、用nextLine反轉文字

問題:將文字第一行變成最後一行,以此類推
思路:

  1. 用buffedReader的nextLine()方法讀取每一行,放到ArrayList裡面
    一開始想用字串陣列儲存每一行的字串,結果發現數組需要給定初始化長度(就算動態也需要遍歷),所以直接用集合!!!!

  2. 反向遍歷集合,輸入到buffedRrite裡面(這裡用普通的遍歷,因為增強for不能反序)

  3. 流物件儘量晚開早關(但是調整的話好煩啊)

程式碼:

package cn.njupt;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; //注意:流物件儘量晚開早關(但是調整的話好煩啊) public class file { public static void main(String[] args) throws IOException { BufferedReader bre = new BufferedReader(new FileReader("xxx.txt")); BufferedWriter bwr =
new BufferedWriter(new FileWriter("bbb.txt")); ArrayList<String> list = new ArrayList<>(); String line; while ((line = bre.readLine()) != null) { list.add(line); } // 增強for迴圈不能反序,所以這裡直接用普通的for迴圈 for (int i = list.size() - 1; i >= 0; i--) { bwr.write(list.get(i)); bwr.newLine(); } bre.close(); bwr.close(); } }

5、轉換流:(為了優化流的傳輸)

public class file {
	public static void main(String[] args) throws IOException {
		BufferedReader bre = 
				new BufferedReader(new InputStreamReader(new FileInputStream("utf-8.txt"),"utf-8"));
		BufferedWriter bwr = 
				new BufferedWriter(new OutputStreamWriter(new FileOutputStream("GBK.txt"),"gbk.txt"));
		
	}

轉換流的記憶體示意圖:
在這裡插入圖片描述