Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Ruby3.x】IO::read_nonblock()メソッドの使い方

read_nonblockメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

read_nonblockメソッドは、IOオブジェクトからデータをノンブロッキングモードで読み込むメソッドです。通常のreadメソッドがデータが利用可能になるまでプログラムの実行を停止(ブロック)するのに対し、このメソッドは、指定された最大バイト数(maxlen)のデータをすぐに読み込もうとします。もしデータがまだ準備できていない場合でも、ブロックせずに即座に制御を呼び出し元に返します。

具体的には、データを読み込むことができた場合は、読み込んだ文字列を返します。しかし、読み込みを試みたものの、現在読み取れるデータが一つもない場合には、通常はIO::WaitReadableという例外を発生させます。この例外は、データがまだ準備できていないことを示しており、プログラムは別の処理を実行しながらデータが到着するのを待つことができます。

オプションとしてexception: falseを指定すると、データがない場合に例外を発生させる代わりにnilを返します。また、読み込むべきファイルの終端(EOF)に達した場合は、常にnilが返されます。このノンブロッキングな特性は、ネットワークソケットからのデータ受信など、いつデータが来るか予測できない状況で、他の処理を中断することなく効率的にデータを処理したい場合に非常に役立ちます。

構文(syntax)

1r, w = IO.pipe
2w.write("Some example data")
3w.close
4buffer = r.read_nonblock(5)
5# buffer には "Some " が格納される
6r.close

引数(parameters)

maxlen, outbuf = nil, exception: true

  • maxlen: Integer: 読み込む最大バイト数
  • outbuf = nil: String | nil = nil: 読み込んだデータを格納するバッファ。指定しない場合は新規に作成される。
  • exception: true: Boolean = true: falseに設定すると、EOFErrorを発生させない

戻り値(return)

String or nil

指定されたバイト数または利用可能なデータが読み取れるまで、ブロックせずにIOストリームからデータを読み込みます。読み取れたデータは文字列として返されます。読み取るデータがない場合はnilが返されます。

関連コンテンツ

関連プログラミング言語