検索

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

java - 在程序里读取磁盘文件时,为什么需要使用缓冲区。

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

伊谢尔伦伊谢尔伦2823日前1010

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

  • 天蓬老师

    天蓬老师2017-04-17 17:46:56

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

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:46:56

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

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

    返事
    0
  • 高洛峰

    高洛峰2017-04-17 17:46:56

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

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 17:46:56

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

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

    返事
    0
  • 高洛峰

    高洛峰2017-04-17 17:46:56

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

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:46:56

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

    返事
    0
  • キャンセル返事