21、java.io.BufferedWriter文字バッファフロー
3895 ワード
一、BufferedWriter
は、文字出力ストリームにテキストを書き込み、各文字をバッファリングし、単一の文字、配列、文字列の効率的な書き込みを提供する. は、バッファのサイズを指定するか、デフォルトのサイズを受け入れることができます.ほとんどの場合、デフォルト値は十分です. このクラスはnewLine()メソッドを提供し、プラットフォーム独自の行区切り記号概念を使用します.この概念はシステム属性line.separatorによって定義されます. は、すべてのプラットフォームが新しい行記号(')を使用して各行を終了するわけではありません.
したがって、は、この方法を呼び出して、各出力行を終了するのは、新しい行文字を直接書き込むよりも優れている. は、通常、Writerがその出力をレイヤ文字またはバイトストリームに直ちに送信する. 出力を要求しない限り、BufferedWriterですべてのwrite()操作をパッケージすることを推奨します.FileWritersやOutputStreamWritersなど、コストの高いWriterです. 例えば、PrintWriter out=new PrintWriter(new BufferedWriter(「foo.out」) は、PrintWriterのファイルへの出力をバッファリングする.バッファがない場合、print()メソッドを呼び出すたびに文字がバイトに変換され、すぐにファイルに書き込まれます.これは極めて非効率な です.
二、BufferedReader
文字入力ストリームからテキストを読み出し、各文字をバッファリングすることで、文字、配列、行の効率的な読み取りを実現します. は、バッファのサイズを指定したり、デフォルトのサイズを使用したりすることができます.ほとんどの場合、デフォルト値は十分です. 通常、Readerによって行われる各読み出し要求は、下位文字またはバイトストリームに対して対応する読み出し要求をもたらす.
したがって、は、そのread()操作のすべてをBufferedReaderで包装することを推奨し、FileReaderやInputStreamReaderなどのコストの高いReaderをパッケージします. 例えば、BufferedReader in=new BufferedReader(new FileReader(「foo.in」) は、指定ファイルの入力をバッファリングする. バッファがない場合、read()またはreadLine()が呼び出されるたびに、ファイルからバイトが読み出され、文字に変換されて返されます.これは極めて非効率です. は、各DataInputStreamの代わりに適切なBufferedReaderを使用することによって、DataInputStreamを文字入力に使用するプログラムをローカライズすることができる.
三、ここでは装飾デザインを使っています
四、LineNumberReader
行番号のバッファ文字入力ストリームを追跡します. では、現在の行番号の設定および取得に使用できるメソッドsetLineNumber(int)およびgetLineNumber()が定義されています. デフォルトでは、行番号は0から始まります.この行番号は、データの読み込みに伴って各行の終了文字で増加し、setLineNumber(int)を呼び出すことで行番号を変更できます. ただし、setLineNumber(int)はストリーム内の現在の位置を実際に変更しないことに注意してください.getLineNumber()で返される値のみが変更されます. 行は、改行記号(')、戻り記号('r')、戻り後改行に続く記号の1つで終わると考えられます.
五、例
したがって、
public class BufferedWriter extends Writer
{
//
public BufferedWriter(Writer out){}
//
public BufferedWriter(Writer out,
int sz){}
// 。 line.separator , ('
')
public void newLine()
throws IOException{}
}
二、BufferedReader
したがって、
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
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);
}
}
}