InputStreamとBufferedInputStreamクラスの詳細

4011 ワード

InputStreamとBufferedInputStreamクラスの詳細
 
 
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よりも高いことがわかる.