【Ruby3.x】IO::ungetbyte()メソッドの使い方
ungetbyteメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
ungetbyteメソッドは、IOクラスに属し、既に読み取った1バイトのデータを入力ストリームに「戻す」処理を実行するメソッドです。ファイルや標準入力、ネットワーク接続など、様々な入出力(IO)ストリームからデータを読み進める際、一度取得したバイトを、次に読み込まれるべきデータとしてストリームの先頭に一時的に配置し直します。このメソッドは、戻したい1バイトを表す整数値を引数として受け取ります。
具体的には、ungetbyteメソッドを呼び出した後、readbyteやgetbyteのようなバイト読み取りメソッドを再度実行すると、通常であればストリームから次の新しいバイトが読み込まれる代わりに、ungetbyteで指定したバイトが最初に取得されます。
この機能は、データの先読みを行って特定のパターンを検出した後、その検出に使ったバイトを再度処理対象として戻したい場合などに非常に有効です。例えば、特定の区切り文字を検出するまで読み進め、区切り文字自体は次の処理に回す、といった状況で利用されます。データ解析や構文解析など、一歩進んだ入出力処理において、読み取りの柔軟性を高めるために利用される、便利な機能です。
構文(syntax)
1require 'stringio' 2 3io_object = StringIO.new("initial_data") 4io_object.ungetbyte(97) # 整数値(例: ASCII文字 'a' のバイト値)
引数(parameters)
byte
- byte: IOオブジェクトのバッファに1バイトを戻します。
戻り値(return)
nil
IO#ungetbyte は、バイト列を IO ストリームの先頭に戻すメソッドです。このメソッドは、成功しても失敗しても nil を返します。