names=ungetc
visibility=public
kind=defined

--- ungetc(char) -> nil
IO クラスの同名メソッド [[m:IO#ungetc]] と同じです。

IO クラスの同名メソッドと同じですが、gzip ファイル中に
エラーがあった場合 [[c:Zlib::Error]] 例外や
[[c:Zlib::GzipFile::Error]] 例外が発生します。

gzip ファイルのフッターの処理に注意して下さい。
gzip ファイルのフッターには圧縮前データのチェックサムが
記録されています。GzipReader オブジェクトは、次の時に展開した
データとフッターの照合を行い、エラーがあった場合は
Zlib::GzipFile::NoFooter, Zlib::GzipFile::CRCError,
Zlib::GzipFile::LengthError 例外を発生させます。

  * EOF (圧縮データの最後) を越えて読み込み要求を受けた時。
    すなわち [[m:Zlib::GzipReader#read]],
    [[m:Zlib::GzipReader#gets]] メソッド等が nil を返す時。
  * EOF まで読み込んだ後、[[m:Zlib::GzipFile#close]] メソッドが
    呼び出された時。
  * EOF まで読み込んだ後、[[m:Zlib::GzipReader#unused]] メソッドが
    呼び出された時。

@param char 読み戻したい1文字かそのコードポイントを指定します。

@raise Zlib::Error [[c:Zlib::Error]] を参照
@raise Zlib::GzipFile::Error [[c:Zlib::GzipFile::Error]]を参照
@raise Zlib::GzipFile::NoFooter [[c:Zlib::GzipFile::NoFooter]]を参照
@raise Zlib::GzipFile::CRCError [[c:Zlib::GzipFile::CRCError]]を参照
@raise Zlib::GzipFile::LengthError [[c:Zlib::GzipFile::LengthError]]を参照

  =begin
  # hoge.gz がない場合はこれで作成する。
  Zlib::GzipWriter.open('hoge.gz') { |gz|
    gz.print 'hogefuga'
  }
  =end

  Zlib::GzipReader.open('hoge.gz') { |gz|
    begin
      c1 = gz.getc
      c2 = gz.getc
      break if c2.nil?
      printf "%c -> %c\n", c1, c2
      gz.ungetc(c2)
    end while true
  }

  #=> h -> o
  #=> o -> g
  #=> g -> e
  #=> e -> f
  #=> f -> u
  #=> u -> g
  #=> g -> a
  
@see [[m:IO#ungetc]]

