2017-01-27 11 views
0

BufferedInputStreamの使用に関するいくつかの質問があります。BufferedInputStreamは、ネットワークソケットとファイル読み取りのケースを使用しますか?

まず、特にHDDから1バイトずつデータを読み込むと、BufferedInputStreamのパフォーマンスが大幅に向上すると聞いています。

  1. それは私が4098バイトのチャックで言うと、ファイル全体を読んでいた場合、私はFileInputStreamのかにBufferedInputStreamを使用するかどうかの重要な違いがありますか?

    ByteArrayOutputStream result = new ByteArrayOutputStream(); 
    
        try(FileInputStream fis = new FileInputStream(filePath)) { 
    
         // Create some arbitrary buffer 
         byte[] buffer = new byte[4098]; 
    
         int length; 
    
         while ((length = fis.read(buffer)) != -1) { 
          result.write(buffer, 0, length); 
         } 
        } 
    
        return result.toByteArray(); 
    

    ここで、BufferedInputStreamを使用すると非常に便利ですか?

  2. 同じように、BufferedInputStreamはバイト単位で読み込みを行うときにソケットの違いのみをもたらします。つまり、バッファをプリロードしてバイト単位で読み込むのに便利ですか?

+1

1.実際にはそうではありませんが、4098よりも4096や8192を使うほうが良いでしょう。2.上に何かがあると、違いがあります。 'ObjectInputStream'、' ZipInputStream'など – EJP

+0

あなたは基本ストリームなしでBufferedInputStreamを使用することはできません。また、4096または8192またはxまたはyまたはzは、OSとファイルシステムに完全に依存します。通常は2の累乗です。バッファサイズはページサイズの倍数にする必要があります。 – harivis

答えて

-1

非バッファストリームは、(kはページ・サイズである; OSは、OSのページ・サイズとデータがディスク・ブロック・サイズの倍数でディスクから読み取ることができるの倍数でのみ読むことができる)時のデータのk個のバイトを読み取るからOSキャッシュ(ディスクから読み取られるかどうかは、すでにOSキャッシュに入っているかどうかによって異なります)。一方、バッファされたストリームは、バッファ容量のチャンクを読み込みます。したがって、貴重なディスクIO読み取り量を節約できます。バッファ容量はページサイズの倍数で、ディスクブロックサイズの倍数でなければなりません。

+0

あなたの心を作りましょう。一度に1バイトまたは1バイト以上。同時に彼は両方ではありません。 – EJP

+0

私は、ページサイズとブロックサイズの詳細を調べることで、複雑にしたくないので、1バイトを使用しました。同時に、ユーザーから実際の情報を完全に隠すことは望ましくありません。 – harivis

関連する問題