InputStreamとBufferedInputStreamクラスの詳細
4011 ワード
InputStreamとBufferedInputStreamクラスの詳細
InputStream抽象クラス、私たちはそのサブクラスを探してそれを分析します.FileInputStreamクラス.テストファイルは、大文字のAからZまでのtxtファイルです.
AVailableメソッドでは、ファイルの文字数を表示したり、入力ストリームの後ろにどれだけの文字が入力できるかを分析したりできます.
readメソッドは、ファイル内の文字を1つずつ読み、intの値で返すことができます.テストは次のとおりです.
IOストリームを使用した後は、必ず閉じることを覚えておいてください.すなわちcloseメソッドを呼び出す.そうでなければ、システムリソースを占有したり、他の予想外のことをしたりします.の
readメソッドは、1バイトのintのほかに、byte配列の内容を一度に読み取り、byte配列に配置することもできます.次のようになります.
readメソッドのパラメータタイプはread(byte[],int,int)でもよく、byte[]はデータ保存の配列であり、2つのintはそれぞれデータ保存の初期位置であり、どのくらいのデータを保存するかである.テストは次のとおりです.
markSupportedメソッドは、InputStreamのサブクラスがmarkメソッドとresetメソッドをサポートしているかどうかをテストします.FileInputStreamはfalseを返します.skipメソッドでは、入力ストリームのnバイトをスキップできます.
BufferInputStreamクラス、このクラスはInputStreamクラスのサブクラスFilterInputStreamのサブクラスです.この商品はmarkメソッドとresetメソッドをサポートし、文字ストリームを読むときに牛迫のバッファを作成し、このバッファは文字操作のオーバーヘッドを削減します.効率はInputStreamを直接使用するよりも高い.その他の方法は基本的にInputStreamと類似しており、テストコードは以下の通りである.
今回は24 Kの大きいtxtファイルを使っていますが、効率テストは以下の通りです.
FileInputStreamのreadメソッドを直接使用すると、テストコードは次のようになります.
実行ごとに得られる結果は異なるかもしれないが、Bufferedを用いない時間で31周囲と63周囲で変動することから、BufferedInputStreamクラスの効率はInputStreamよりも高いことがわかる.
InputStream抽象クラス、私たちはそのサブクラスを探してそれを分析します.FileInputStreamクラス.テストファイルは、大文字のAからZまでのtxtファイルです.
AVailableメソッドでは、ファイルの文字数を表示したり、入力ストリームの後ろにどれだけの文字が入力できるかを分析したりできます.
readメソッドは、ファイル内の文字を1つずつ読み、intの値で返すことができます.テストは次のとおりです.
public static void main(String[] args) throws IOException {
InputStream fis = new FileInputStream("C:\\Users\\RedTea\\Desktop\\iotest.txt");
System.out.println(fis.read());
System.out.println(fis.available());
fis.close();
}// :65 25 //65 A ASCII
IOストリームを使用した後は、必ず閉じることを覚えておいてください.すなわちcloseメソッドを呼び出す.そうでなければ、システムリソースを占有したり、他の予想外のことをしたりします.の
readメソッドは、1バイトのintのほかに、byte配列の内容を一度に読み取り、byte配列に配置することもできます.次のようになります.
public static void main(String[] args) throws IOException {
InputStream fis = new FileInputStream("C:\\Users\\RedTea\\Desktop\\iotest.txt");
byte [] b=new byte[5];
fis.read(b);
fis.close();
System.out.println(b[0]);
System.out.println(b[4]);
// :65 69 5 byte
readメソッドのパラメータタイプはread(byte[],int,int)でもよく、byte[]はデータ保存の配列であり、2つのintはそれぞれデータ保存の初期位置であり、どのくらいのデータを保存するかである.テストは次のとおりです.
public static void main(String[] args) throws IOException {
InputStream fis = new FileInputStream("C:\\Users\\RedTea\\Desktop\\iotest.txt");
byte [] b=new byte[5];
fis.read(b,2,3);
fis.close();
for(int a:b){
System.out.println(a);
}
}// :0 0 65 66 67
markSupportedメソッドは、InputStreamのサブクラスがmarkメソッドとresetメソッドをサポートしているかどうかをテストします.FileInputStreamはfalseを返します.skipメソッドでは、入力ストリームのnバイトをスキップできます.
public static void main(String[] args) throws IOException {
InputStream fis = new FileInputStream("C:\\Users\\RedTea\\Desktop\\iotest.txt");
System.out.println(fis.markSupported());
System.out.println(fis.read());
fis.skip(1);
System.out.println(fis.read());
fis.close();
}// :false 65 67
BufferInputStreamクラス、このクラスはInputStreamクラスのサブクラスFilterInputStreamのサブクラスです.この商品はmarkメソッドとresetメソッドをサポートし、文字ストリームを読むときに牛迫のバッファを作成し、このバッファは文字操作のオーバーヘッドを削減します.効率はInputStreamを直接使用するよりも高い.その他の方法は基本的にInputStreamと類似しており、テストコードは以下の通りである.
public static void main(String[] args) throws IOException {
InputStream ins =new FileInputStream("C:\\Users\\RedTea\\Desktop\\iotest.txt");
BufferedInputStream bis = new BufferedInputStream(ins);
bis.mark(1);
System.out.println(bis.read());
System.out.println(bis.read());
bis.reset();
System.out.println(bis.read());
ins.close();
bis.close();
}// :65 66 65
今回は24 Kの大きいtxtファイルを使っていますが、効率テストは以下の通りです.
public static void main(String[] args) throws IOException {
long pre =System.currentTimeMillis();
InputStream ins =new FileInputStream("C:\\Users\\RedTea\\Desktop\\iotest.txt");
BufferedInputStream bis = new BufferedInputStream(ins);
while(bis.available()!=0){
bis.read();
}
long post =System.currentTimeMillis();
System.out.println(post-pre+"*******");
}
}// :31*******
FileInputStreamのreadメソッドを直接使用すると、テストコードは次のようになります.
public static void main(String[] args) throws IOException {
long pre =System.currentTimeMillis();
InputStream ins =new FileInputStream("C:\\Users\\RedTea\\Desktop\\iotest.txt");
while(ins.available()!=0){
ins.read();
}
ins.close();
long post =System.currentTimeMillis();
System.out.println(post-pre+"*******");
}
}// :63*******
実行ごとに得られる結果は異なるかもしれないが、Bufferedを用いない時間で31周囲と63周囲で変動することから、BufferedInputStreamクラスの効率はInputStreamよりも高いことがわかる.