зеркало из https://github.com/github/ruby.git
37 строки
587 B
Ruby
37 строки
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
|