35 lines
525 B
Ruby
35 lines
525 B
Ruby
class ZipFile::Reader::IO
|
|
def initialize(entry, io)
|
|
@entry = entry
|
|
@io = io
|
|
@extractor = @entry.extractor_from(@io)
|
|
end
|
|
|
|
def read(length = nil, buffer = nil)
|
|
return nil if @extractor.eof?
|
|
|
|
data = @extractor.extract(length)
|
|
return nil if data.nil?
|
|
|
|
if buffer
|
|
buffer.replace(data)
|
|
buffer
|
|
else
|
|
data
|
|
end
|
|
end
|
|
|
|
def eof?
|
|
@extractor.eof?
|
|
end
|
|
|
|
def rewind
|
|
@extractor = @entry.extractor_from(@io)
|
|
0
|
|
end
|
|
|
|
def size
|
|
@entry.uncompressed_size
|
|
end
|
|
end
|