mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
65a5162550
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@520 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
36 lines
587 B
Ruby
36 lines
587 B
Ruby
# readbytes.rb
|
|
#
|
|
# add IO#readbytes, which reads fixed sized data.
|
|
# it guarantees read data size.
|
|
|
|
class TruncatedDataError<IOError
|
|
def initialize(mesg, data)
|
|
@data = data
|
|
super(mesg)
|
|
end
|
|
attr_reader :data
|
|
end
|
|
|
|
class IO
|
|
def readbytes(n)
|
|
str = read(n)
|
|
if str == nil
|
|
raise EOFError, "End of file reached"
|
|
end
|
|
if str.size < n
|
|
raise TruncatedDataError.new("data truncated", str)
|
|
end
|
|
str
|
|
end
|
|
end
|
|
|
|
if __FILE__ == $0
|
|
begin
|
|
loop do
|
|
print STDIN.readbytes(6)
|
|
end
|
|
rescue TruncatedDataError
|
|
p $!.data
|
|
raise
|
|
end
|
|
end
|