Java の IO ストリームは入出力を実現する基盤であり、データの入出力操作を簡単に実現できます。Java ではさまざまな入出力ソースを「ストリーム」として抽象的に表現します。
ストリームは順序付けられたバイトのセットであり、データ送信の一般用語または抽象化です。
ストリームには入力と出力があり、入力中にストリームはデータ ソースからプログラムに流れます。出力する場合、ストリームはプログラムからデータ ソースに転送されます。データ ソースはメモリ、ファイル、ネットワーク、プログラムなどです。
ユーザー プロセスとオペレーティング システム カーネル
Java の IO は、Java プログラムとオペレーティング システムの間にあるものとして理解できます。カーネル、オブジェクト間。
後で説明するブロッキングとノンブロッキング、同期と非同期は、これら 2 つのオブジェクト間の相互作用の結果です。この記事では、ユーザー プロセスとは Java プログラムを指します。
プログラム空間とカーネル空間
データの準備ができるまで待機中(データがカーネル バッファに到着するのを待機中)
カーネルからプロセスへのデータ (カーネル バッファからプログラム バッファへのデータのコピー)
Linux では、読み取り IO 操作の場合、データはプログラムのプログラム バッファに直接コピーされません。
最初にオペレーティング システム カーネルのバッファにコピーされ、次にオペレーティング システム カーネルのバッファからアプリケーションのバッファにコピーされます。
プログラム空間: ユーザープログラムに割り当てられるメモリ空間。
カーネル空間: カーネルが所有するメモリ空間。
ブロッキングと非ブロッキング
ブロッキング: ユーザー プロセスがシステム コールを行った後、ユーザー プロセスは常にロック状態になり、他の操作を実行できなくなります
ノンブロッキング: ユーザー プロセスがシステム コールを行った後、ユーザー プロセスはロックされず、他の操作を実行できます。
ブロッキングとノンブロッキングは、ユーザー プロセスのステータスを指します。ユーザー プロセスがロックされているかどうか
#同期と非同期##同期 I/O 操作では、その I/O 操作が完了するまで要求元のプロセスがブロックされます。
非同期 I/O 操作では、要求側のプロセスはブロックされません。
同期 I/O 操作では、IO 操作が完了するまで、要求側のプロセスがブロックされます。非同期 IO 操作では、要求元のスレッドがブロックされることはありません。
同期: ユーザー スレッドと IO スレッドは同じことを行います (ユーザー スレッドはブロックされ、カーネルが処理結果を返すのを待ちます)
非同期: ユーザー スレッドと IO スレッドはスレッドはさまざまな処理を実行します (ユーザー スレッドはブロックされず、他の処理を行い、カーネル処理が完了し、結果がユーザー スレッドに送信されます)
ファイル記述子Linux ではすべてがファイルです。ファイル記述子は、カーネルによってファイルに対して作成されるインデックスであり、後述するソケットを含め、すべての I/O 操作はファイル記述子 (インデックス) を呼び出すことによって実行されます。 Linux を初めて起動すると、標準入力として 0、標準出力として 1、標準エラーとして 2 が自動的に設定されます。
以上がJava io が重要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。