21、java.io.BufferedWriter文字バッファフロー


一、BufferedWriter
 
  • は、文字出力ストリームにテキストを書き込み、各文字をバッファリングし、単一の文字、配列、文字列の効率的な書き込みを提供する. 
  • は、バッファのサイズを指定するか、デフォルトのサイズを受け入れることができます.ほとんどの場合、デフォルト値は十分です. 
  • このクラスはnewLine()メソッドを提供し、プラットフォーム独自の行区切り記号概念を使用します.この概念はシステム属性line.separatorによって定義されます.
  • は、すべてのプラットフォームが新しい行記号(')を使用して各行を終了するわけではありません.

  • したがって、
  • は、この方法を呼び出して、各出力行を終了するのは、新しい行文字を直接書き込むよりも優れている. 
  • は、通常、Writerがその出力をレイヤ文字またはバイトストリームに直ちに送信する.
  • 出力を要求しない限り、BufferedWriterですべてのwrite()操作をパッケージすることを推奨します.FileWritersやOutputStreamWritersなど、コストの高いWriterです.
  • 例えば、PrintWriter out=new PrintWriter(new BufferedWriter(「foo.out」)
  • は、PrintWriterのファイルへの出力をバッファリングする.バッファがない場合、print()メソッドを呼び出すたびに文字がバイトに変換され、すぐにファイルに書き込まれます.これは極めて非効率な
  • です.
     
    public class BufferedWriter extends Writer
    {
    	//                       
    	public BufferedWriter(Writer out){}
    
    	//                        
    	public BufferedWriter(Writer out,
                          int sz){}
    
    	//        。             line.separator   ,           ('
    ') public void newLine() throws IOException{} }
     
     
    二、BufferedReader
     
     
  • 文字入力ストリームからテキストを読み出し、各文字をバッファリングすることで、文字、配列、行の効率的な読み取りを実現します. 
  • は、バッファのサイズを指定したり、デフォルトのサイズを使用したりすることができます.ほとんどの場合、デフォルト値は十分です. 
  • 通常、Readerによって行われる各読み出し要求は、下位文字またはバイトストリームに対して対応する読み出し要求をもたらす.

  • したがって、
  • は、そのread()操作のすべてをBufferedReaderで包装することを推奨し、FileReaderやInputStreamReaderなどのコストの高いReaderをパッケージします.
  • 例えば、BufferedReader in=new BufferedReader(new FileReader(「foo.in」)
  • は、指定ファイルの入力をバッファリングする.
  • バッファがない場合、read()またはreadLine()が呼び出されるたびに、ファイルからバイトが読み出され、文字に変換されて返されます.これは極めて非効率です. 
  • は、各DataInputStreamの代わりに適切なBufferedReaderを使用することによって、DataInputStreamを文字入力に使用するプログラムをローカライズすることができる.

  •  
    public class BufferedReader extends Reader
    {
    	//                       8192byte 8kb
    	public BufferedReader(Reader in){}
    
    	//                       
    	public BufferedReader(Reader in,
                          int sz){}
    
    	//       。                 :   ('
    ')、 ('\r') // , , , null public String readLine() throws IOException{} }
     
    三、ここでは装飾デザインを使っています
     
    四、LineNumberReader
     
  • 行番号のバッファ文字入力ストリームを追跡します.
  • では、現在の行番号の設定および取得に使用できるメソッドsetLineNumber(int)およびgetLineNumber()が定義されています. 
  • デフォルトでは、行番号は0から始まります.この行番号は、データの読み込みに伴って各行の終了文字で増加し、setLineNumber(int)を呼び出すことで行番号を変更できます.
  • ただし、setLineNumber(int)はストリーム内の現在の位置を実際に変更しないことに注意してください.getLineNumber()で返される値のみが変更されます. 
  • 行は、改行記号(')、戻り記号('r')、戻り後改行に続く記号の1つで終わると考えられます.
  • public class LineNumberReader extends BufferedReader
    {
    	//                    reader
    	public LineNumberReader(Reader in){}
    
    	//        reader,             
    	public LineNumberReader(Reader in,
                            int sz){}
    
    	//      。
    	public int getLineNumber(){}
    
    	//      。
    	public void setLineNumber(int lineNumber){}
    }

     
    五、例
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.LineNumberReader;
    
    public class Test {
    
    	public static void main(String[] args) throws IOException {
    		FileReader fr = new FileReader("E:\\f\\eclipse\\artifacts.xml");
    		LineNumberReader lnr = new LineNumberReader(fr);
    		String line = null;
    		int num = 0;
    		while((line=lnr.readLine())!=null)
    		{
    			num = lnr.getLineNumber();
    			System.out.println(num+"::"+line);
    		}
    	}
    }