java - 在程序里读取磁盘文件时,为什么需要使用缓冲区。
伊谢尔伦
伊谢尔伦 2017-04-17 17:44:56
0
6
972

java中,读取磁盘文件时,通常都使用BufferedInputStream包装FileInputStream。
但是操作系统内核读取磁盘文件时,不是会将内存作为磁盘文件的缓冲区吗?
那为什么还要在程序里自己使用缓冲区??

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全員に返信(6)
Peter_Zhu

正確に言うと、オペレーティング システムは、データ セキュリティを保護するためにユーザー領域とシステム領域を分離する必要があるため、ファイルを読み取るときに、そのファイルをシステム領域に読み取り、それをアプリケーションのユーザーにコピーします。プロセス空間、つまり質問で述べたように、ユーザープロセスがオペレーティングシステム空間のバッファに直接アクセスできる場合、オペレーティングシステムは安全ではありません。

いいねを押す +0
伊谢尔伦

FileInputStream/FileOutputStream は、read()/write() が呼び出されるたびに IO 操作をトリガーします。
BufferedInputStream/BufferedOutputSteam の read()/write() 呼び出しは、毎回 IO 操作をトリガーするわけではなく、内部バッファーに書き込むだけです。IO 操作は、内部バッファーがいっぱいであるか、flush() が呼び出された場合にのみトリガーされます。 。

IO 操作が少ないほど、パフォーマンスは向上します。

いいねを押す +0
小葫芦

IO を実行するとき、JVM は独自のヒープ領域にバッファとしてバイト配列を作成します。一般に、ユーザーは JVM を介してメモリ (ダイレクトバッファ) を呼び出すことはできません。ヒープ領域のバッファとメモリ間のやり取りは、次のように管理されます。 JVM。このようにして、GC メカニズムや Java の高レベルのカプセル化 API などの JVM の利点を活用できます。

いいねを押す +0
洪涛

オペレーティング システムは、ハードディスク上のファイルをメモリに読み込んでキャッシュとして使用するだけでなく、メモリ内のデータをキャッシュするためにメモリ内に別のスペースを開きます。
どういう意味ですか? 管理と効率化のため。
メモリとメモリ間のデータ交換速度は、メモリとハードディスク間のデータ交換速度よりも 2 桁高速です。
メモリ上のプロセスがデータを必要とする場合、メモリキャッシュに一致するデータがあればキャッシュ領域から直接取得されます。
そうでない場合はハードディスクから読み取られます。 (書く場合も同様です)

IO 操作における Java のキャッシュ設計の重要性はここにもあります。
違いは、Java によってキャッシュされたデータは、Java の現在の実行環境でのみ使用できることです。
これは、オペレーティング システムのキャッシュから頻繁にデータを取得する場合と比較して、実行効率が向上します。
これは、コードで頻繁な IO 操作が必要な場合に特に当てはまります。

いいねを押す +0
小葫芦

いわゆるバッファのほとんどはハードディスクハードウェアによってインターフェース領域にカプセル化されており、バッファ領域は大きくありません。オペレーティング システムは、ファイルの内容をメモリにキャッシュしません。

いいねを押す +0
巴扎黑

ハードドライブの速度が十分ではないからです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!