1. 程式人生 > >Java 位元組流轉字元流

Java 位元組流轉字元流

    在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();
        }
    }

效果: