検索

ホームページ  >  に質問  >  本文

java - bufferedinputstream也需要指定一个数组长度呀?并没有什么用呀?

他与fileinputstream 的区别是什么呀?他不是自带缓冲区吗?为什么还需要指定一个byte数组?

PHP中文网PHP中文网2822日前719

全員に返信(3)返信します

  • 阿神

    阿神2017-04-17 17:50:10

    そのキャッシュとあなた自身のキャッシュは同じ概念ではありません。一般的なプロセスは次のとおりです。

    キャッシュせずに inputstream を使用する場合

    読み取るたびに、システムは読み取り操作を実行してデータを読み取ります。読み取るバイトを指定すると 1 バイトが読み取られ、配列を指定すると配列が読み取られます。プログラムとデータの違い 読み込み効率には大きな関係があります。

    を使用すると、次のようになります bufferedinputstream

    を作成すると、bufferedinputstream すぐにデータを読み取り、jvm によって管理されるメモリに配置されます。 読み取るたびに、
    再度そこに移動することはありません。システムで読み込むときは、メモリ 内のデータを読み取り、メモリに十分なデータが残っているかどうかを判断し、そうでない場合は、バイトを読み取っているかどうかをシステムに指示します。またはアレイの場合、システムはハードドライブを操作できない可能性があります。
    プログラムとデータ読み取り効率との相関関係は非常に小さいです。

    別の角度から考えてみましょう。

    バッファなしでストリームを使用し、ファイルを開いてすぐに閉じると、システム
    はデータ呼び出しを行わず、クローズはすぐに実行されました。 また、バッファリングされたストリームを使用してファイルを開く場合、読み取りを行わずにすぐに閉じたとしても、クローズはすぐには実行されず、システム
    はすでにデータの一部をメモリに読み取っています 、バッファなしで使用する場合よりも効率が低くなります。

    もちろん、ストリームを作成して、それを読まずに閉じるほど退屈する人はいないでしょう?

    返事
    0
  • PHPz

    PHPz2017-04-17 17:50:10

    バッファリングと、コンテンツを受信するための配列の使用の間には関係はありません。バッファリングを使用する場合、コンテンツを受信するために配列が必要ないという意味ではありません。

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-17 17:50:10

    この byte[] を再​​利用したいと考えているため、そうしないと、大規模なデータ ストリーム IO 送信に直面したときに、YGC が非常に満足することがわかります

    返事
    0
  • キャンセル返事