Java-変換ストリーム、文字バッファストリーム

12273 ワード

転換流
OutputStreamWriterは、指定された文字コードテーブルを使用して、ストリームに書き込む文字をバイトにエンコードします。その役割は、文字列を指定された符号表に従ってバイトに変換し、バイトストリームを使ってこれらのバイトを書き出すことです。
 
コードのプレゼンテーション:
public static void writeCN() throws Exception {
        //               
        FileOutputStream fos = new FileOutputStream("c:\\cn8.txt");
        //
        OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
        //     ,      ,             
        osw.write("  ");//
        osw.close();
    }
OutputStreamWriterオブジェクトのwriteメソッドを呼び出すと、文字を指定のコードテーブルに照会し、調べた文字の符号化値をバイト数に変換してOutput StreamWriterバッファに格納します。リフレッシュ機能を呼び出したり、ストリームを閉じたり、バッファがいっぱいになると、指定されたファイルにバイトデータを使ってバイトストリームを書き込みます。
InputStreamReaderは、指定された文字コード表を使ってバイトを読み込み、文字に復号するバイトストリームのブリッジである。使用する文字セットは、名前によって指定されたり、明示的に与えられたり、プラットフォームのデフォルトの文字セットを受け入れることができます。
 
コードのプレゼンテーション:
public class InputStreamReaderDemo {
    public static void main(String[] args) throws IOException {
        //            
        readCN();
    }
    public static void readCN() throws IOException{
        //            
        InputStream in = new FileInputStream("c:\\cn8.txt");
        //        
        //InputStreamReader isr = new InputStreamReader(in);      ,          ,           
        InputStreamReader isr = new InputStreamReader(in,"utf-8");
        //              
        int ch = 0;
        while((ch = isr.read())!=-1){
            System.out.println((char)ch);
        }
        //   
        isr.close();
    }
}
指定された符号化されたファイルを読み込むときは、必ず符号化フォーマットを指定してください。復号エラーが発生し、文字化けが発生します。
変換ストリームとサブクラスの違い:
OutputStreamWriterとInputStreamReaderは文字とバイトの橋です。文字変換ストリームともいいます。文字変換ストリームの原理:バイトストリーム+符号表。
 
FileWriterとFileReader:サブクラスとしては、操作文字ファイルの便利類としてのみ存在します。操作された文字ファイルは、デフォルトのコードテーブルを使用していますが、親類を使わずに直接サブクラスで操作が完了し、コードが簡略化されました。
 
InputStream Reader isr=new InputStream Reader(new FileInputStream)//デフォルトの文字セット
 
InputStream Reader isr=new InputStream Reader(new FileInputStream(「a.txt」)、「GBK」)GBK文字セットを指定します。
 
FileReader fr=new FileReader(「a.txt」);
 
この三つのコードの機能は同じです。その中で第三文が一番便利です。
 
注意:他の符号化を指定する場合は、サブクラスは絶対に使用しないでください。文字変換ストリームは必ず使用してください。子供はいつ使いますか?
 
条件:1、操作はファイルです。2、デフォルトのコードを使います。
 
まとめ:
 
バイト-->文字:読めない-->分かります。 読みたいです。入力ストリームInputStream Reader
 
文字-->バイト:読むことが分かります。 書く必要があります。出力ストリームOutput Stream Writer
 
 
バッファ:
バイトバッファは流れの方向によって2つあります。
データをストリームに書き込み、バイトバッファ出力ストリームBufferedOutputStream
ストリーム中のデータを読み出し、バイトバッファ入力ストリームBufferedInputStream
 これらの内部にはバッファが含まれています。バッファを通して読み書きすることで、IOストリームの読み書き速度が向上します。
 
バイトバッファを通して、ファイルの読み書き操作を行い、データをファイルに書き込む操作を行います。  
作成方法
public BufferedOutputStreamは、指定された最下層出力ストリームにデータを書き込むための新しいバッファ出力ストリームを作成します。 
public class BufferedOutputStreamDemo01 {
    public static void main(String[] args) throws IOException {        
        //         
        write();
    }
    /*
     *          
     * 1,   
     * 2,   
     * 3,   
     */
    private static void write() throws IOException {
        //          
        FileOutputStream fileOut = new FileOutputStream("abc.txt");
        //      ,         ,       
        BufferedOutputStream out = new BufferedOutputStream(fileOut);
        //2,   
        out.write("hello".getBytes());
        //3,   
        out.close();
    }
}
バイトバッファ入力ストリームBufferedInputStream
構造方法public BufferediInputStream(InputStream in) 
/*
     *         
     * 1,       
     * 2,   ,  
     * 3,  
     */
    private static void read() throws IOException {
        //1,       
        FileInputStream fileIn = new FileInputStream("abc.txt");
        //            
        BufferedInputStream in = new BufferedInputStream(fileIn);
        //2,   
        int ch = -1;
        while ( (ch = in.read()) != -1 ) {
            //  
            System.out.print((char)ch);
        }
        //3,  
        in.close();
    }
文字バッファ
文字バッファ入力ストリームBufferedReader
キャラクタバッファ出力ストリーム
テキストデータの効率的な書き込みと読み出しを完了します。
BufferedWriter 文字出力ストリームにテキストを書き込み、各文字をバッファリングして、単一文字、配列、文字列の効率的な書き込みを提供します。
方法:void newLine()現在のシステムに従って、改行符を書きます。
/*
 * BufferedWriter        
 *   
 *     public void newLine()        
 * 
 *   :               
 *   :
 *     1,     
 *     2,   
 *     3,   
 * 
 */
public class BufferedWriterDemo {
    public static void main(String[] args) throws IOException {
        //   
        //       
        FileWriter fileOut = new FileWriter("file.txt");
        //         
        BufferedWriter out = new BufferedWriter(fileOut);
        //2,   
        for (int i=0; i<5; i++) {
            out.write("hello");
            out.newLine();
        }
        //3,   
        out.close();
    }
}
BufferedReader  文字入力ストリームからテキストを読み取り、各文字をバッファリングし、文字、配列、行の効率的な読み取りを実現します。
方法:  public String readLine() テキスト行を読み、行の内容を含む文字列には、行の終止符が含まれていません。ストリームの最後に達したら、nullに戻ります。
/*
 * BufferedReader        
 * 
 *   :
 *     String readLine() 
 *   :        ,     
 */
public class BufferedReaderDemo {
    public static void main(String[] args) throws IOException {
        //1,   
        BufferedReader in = new BufferedReader(new FileReader("file.txt"));
        //2,   
        //      
        //        
        //               
        String line = null;
        while( (line = in.readLine()) != null ){
            System.out.println(line);
        }
        //3,   
        in.close();
    }
}