Java 位元組流轉字元流
阿新 • • 發佈:2019-01-08
在java.io包中操作檔案
1>按流向分:輸入流和輸出流
2>按處理資料分:位元組流和字元流
2.1 位元組流: InputStream,OutputStream 都是抽象類(處理位元組或二進位制物件)
2.2 字元流: Reader,Writer都是抽象類,(一個字元佔兩個位元組)(處理字元或字串)
3>流的處理如下:
File file =new File("test1.txt"); 3.1>緩衝流 (小說) FileWriter fw = new FileWriter(file); PrintWriter pw = new PrintWriter(fw); 3.2>資料流(二進位制流) 音訊,視訊,圖片 FileInputStream fis=new FileInputStream(file); DataInputStream dis=new DataInputStream(fis); 3.3>物件流** 序列化是將物件的狀態寫入到特定的流中的過程 (寫) 反序列化則是從特定的流中獲取資料重新構建物件的過程 (讀) FileInputStream fos = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fos); 注意:解決讀取時中文亂碼: (1)字元流+緩衝流==》不能解決 *(2)位元組流轉換成字元流+緩衝流==》解決 FileInputStream fis =new FileInputStream(file); InputStreamReader reader=new InputStreamReader(fis,"gbk"); BufferedReader br=new BufferedReader(reader);)
讀取時出現亂碼問題:
java中提供了將位元組流轉為字元流的操作類,有也可以解決亂碼問題:
public static void br2() { File file=new File("Intel.txt"); try( //位元組輸入流物件 FileInputStream fis =new FileInputStream(file); // 將位元組輸入流轉化成字元輸入流,並設定編碼格式gbk,InputStreamReader為 Reader 的子類 InputStreamReader reader=new InputStreamReader(fis,"gbk"); //緩衝流物件 BufferedReader br=new BufferedReader(reader);){ System.out.println("讀取當前檔案編碼:"+reader.getEncoding()); String str=""; //遍歷讀取 while((str=br.readLine())!=null){ System.out.println(str); } }catch (Exception ex){ ex.printStackTrace(); } }
效果: