instance method Zlib::GzipReader#ungetc

ungetc(char) -> nil[permalink][rdoc][edit]

IO クラスの同名メソッド IO#ungetc と同じです。

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

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

[PARAM] char:
読み戻したい1文字かそのコードポイントを指定します。
[EXCEPTION] Zlib::Error:
Zlib::Error を参照
[EXCEPTION] Zlib::GzipFile::Error:
Zlib::GzipFile::Errorを参照
[EXCEPTION] Zlib::GzipFile::NoFooter:
Zlib::GzipFile::NoFooterを参照
[EXCEPTION] Zlib::GzipFile::CRCError:
Zlib::GzipFile::CRCErrorを参照
[EXCEPTION] Zlib::GzipFile::LengthError:
Zlib::GzipFile::LengthErrorを参照
require 'zlib'

=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_ALSO] IO#ungetc