他与fileinputstream 的区别是什么呀?他不是自带缓冲区吗?为什么还需要指定一个byte数组?
阿神2017-04-17 17:50:10
そのキャッシュとあなた自身のキャッシュは同じ概念ではありません。一般的なプロセスは次のとおりです。
キャッシュせずに inputstream を使用する場合
読み取るたびに、システムは読み取り操作を実行してデータを読み取ります。読み取るバイトを指定すると 1 バイトが読み取られ、配列を指定すると配列が読み取られます。プログラムとデータの違い 読み込み効率には大きな関係があります。
とを使用すると、次のようになります
bufferedinputstream
を作成すると、bufferedinputstream
すぐにデータを読み取り、jvm によって管理されるメモリに配置されます。 読み取るたびに、
再度そこに移動することはありません。システムで読み込むときは、メモリ 内のデータを読み取り、メモリに十分なデータが残っているかどうかを判断し、そうでない場合は、バイトを読み取っているかどうかをシステムに指示します。またはアレイの場合、システムはハードドライブを操作できない可能性があります。
プログラムとデータ読み取り効率との相関関係は非常に小さいです。
バッファなしでストリームを使用し、ファイルを開いてすぐに閉じると、システム
はデータ呼び出しを行わず、クローズはすぐに実行されました。 また、バッファリングされたストリームを使用してファイルを開く場合、読み取りを行わずにすぐに閉じたとしても、クローズはすぐには実行されず、システム
はすでにデータの一部をメモリに読み取っています 、バッファなしで使用する場合よりも効率が低くなります。
PHPz2017-04-17 17:50:10
バッファリングと、コンテンツを受信するための配列の使用の間には関係はありません。バッファリングを使用する場合、コンテンツを受信するために配列が必要ないという意味ではありません。
天蓬老师2017-04-17 17:50:10
この byte[] を再利用したいと考えているため、そうしないと、大規模なデータ ストリーム IO 送信に直面したときに、YGC が非常に満足することがわかります