class Zipography::IOReverseChunks
Attributes
fsize[R]
io[R]
Public Class Methods
new(io, bufsiz: 4096, debug: false)
click to toggle source
# File lib.rb, line 24 def initialize io, bufsiz: 4096, debug: false @io = io @fsize = io.stat.size @bufsiz = bufsiz > @fsize ? (@fsize/2.0).ceil : bufsiz @seek = -@bufsiz @io.seek @seek, IO::SEEK_END @debug = debug $stderr.puts "#{@io.path}: seek=#{@seek}, bufsiz=#{@bufsiz}" if @debug end
Public Instance Methods
each() { |chunk| ... }
click to toggle source
# File lib.rb, line 37 def each idx = 0 while (chunk = @io.read(@bufsiz)) return if chunk.size == 0 yield chunk idx += 1 return if @seek == 0 @seek = -@bufsiz*(idx+1) begin @io.seek @seek, IO::SEEK_END rescue Errno::EINVAL @bufsiz = -(@bufsiz*(idx+1) - @fsize - @bufsiz) @seek = 0 @io.seek @seek end $stderr.puts "#{@io.path}: seek=#{@seek}, bufsiz=#{@bufsiz}" if @debug end end