Class | Bio::FlatFile::BufferedInputStream |
In: |
lib/bio/io/flatfile/buffer.rb
|
Parent: | Object |
Wrapper for a IO (or IO-like) object. It can input with a buffer.
path | [R] | Pathname, filename or URI to open the object. Like File#path, returned value isn‘t normalized. |
Creates a new input stream wrapper to open file filename by using File.open. *arg is passed to File.open.
Like File.open, a block can be accepted.
# File lib/bio/io/flatfile/buffer.rb, line 46 46: def self.open_file(filename, *arg) 47: if block_given? then 48: File.open(filename, *arg) do |fobj| 49: yield self.new(fobj, filename) 50: end 51: else 52: fobj = File.open(filename, *arg) 53: self.new(fobj, filename) 54: end 55: end
Creates a new input stream wrapper from URI specified as uri. by using OpenURI.open_uri or URI#open. uri must be a String or URI object. *arg is passed to OpenURI.open_uri or URI#open.
Like OpenURI.open_uri, it can accept a block.
# File lib/bio/io/flatfile/buffer.rb, line 63 63: def self.open_uri(uri, *arg) 64: if uri.kind_of?(URI) 65: if block_given? 66: uri.open(*arg) do |fobj| 67: yield self.new(fobj, uri.to_s) 68: end 69: else 70: fobj = uri.open(*arg) 71: self.new(fobj, uri.to_s) 72: end 73: else 74: if block_given? 75: OpenURI.open_uri(uri, *arg) do |fobj| 76: yield self.new(fobj, uri) 77: end 78: else 79: fobj = OpenURI.open_uri(uri, *arg) 80: self.new(fobj, uri) 81: end 82: end 83: end
Closes the IO object if possible
# File lib/bio/io/flatfile/buffer.rb, line 95 95: def close 96: @io.close 97: end
Returns true if end-of-file. Otherwise, returns false.
Note that it returns false if internal buffer is this wrapper is not empty,
# File lib/bio/io/flatfile/buffer.rb, line 124 124: def eof? 125: if @buffer.size > 0 126: false 127: else 128: @io.eof? 129: end 130: end
Same as IO#getc.
# File lib/bio/io/flatfile/buffer.rb, line 184 184: def getc 185: if @buffer.size > 0 then 186: r = @buffer[0] 187: @buffer = @buffer[1..-1] 188: else 189: r = @io.getc 190: end 191: r 192: end
Same as IO#gets.
Compatibility note: the bahavior of paragraph mode (io_rs = ’’) may differ from that of IO#gets(’’).
# File lib/bio/io/flatfile/buffer.rb, line 136 136: def gets(io_rs = $/) 137: if @buffer.size > 0 138: if io_rs == nil then 139: r = @buffer + @io.gets(nil).to_s 140: @buffer = '' 141: else 142: if io_rs == '' then # io_rs.empty? 143: sp_rs = /((?:\r?\n){2,})/n 144: else 145: sp_rs = io_rs 146: end 147: a = @buffer.split(sp_rs, 2) 148: if a.size > 1 then 149: r = a.shift 150: r += (io_rs.empty? ? a.shift : io_rs) 151: @buffer = a.shift.to_s 152: else 153: @buffer << @io.gets(io_rs).to_s 154: a = @buffer.split(sp_rs, 2) 155: if a.size > 1 then 156: r = a.shift 157: r += (io_rs.empty? ? a.shift : io_rs) 158: @buffer = a.shift.to_s 159: else 160: r = @buffer 161: @buffer = '' 162: end 163: end 164: end 165: r 166: else 167: @io.gets(io_rs) 168: end 169: end
Returns current file position
# File lib/bio/io/flatfile/buffer.rb, line 108 108: def pos 109: @io.pos - @buffer.size 110: end
Sets current file position if possible Internal buffer in this wrapper is cleared.
# File lib/bio/io/flatfile/buffer.rb, line 114 114: def pos=(p) 115: r = (@io.pos = p) 116: @buffer = '' 117: r 118: end
Gets current prefetch buffer
# File lib/bio/io/flatfile/buffer.rb, line 202 202: def prefetch_buffer 203: @buffer 204: end
It does @io.gets, and addes returned string to the internal buffer, and returns the string.
# File lib/bio/io/flatfile/buffer.rb, line 208 208: def prefetch_gets(*arg) 209: r = @io.gets(*arg) 210: @buffer << r if r 211: r 212: end
It does @io.readpartial, and addes returned string to the internal buffer, and returns the string.
# File lib/bio/io/flatfile/buffer.rb, line 216 216: def prefetch_readpartial(*arg) 217: r = @io.readpartial(*arg) 218: @buffer << r if r 219: r 220: end
Rewinds the IO object if possible Internal buffer in this wrapper is cleared.
# File lib/bio/io/flatfile/buffer.rb, line 101 101: def rewind 102: r = @io.rewind 103: @buffer = '' 104: r 105: end
Skips space characters in the stream. returns nil.
# File lib/bio/io/flatfile/buffer.rb, line 224 224: def skip_spaces 225: ws = { ?\s => true, ?\n => true, ?\r => true, ?\t => true } 226: while r = self.getc 227: unless ws[r] then 228: self.ungetc(r) 229: break 230: end 231: end 232: nil 233: end
Converts to IO object if possible
# File lib/bio/io/flatfile/buffer.rb, line 90 90: def to_io 91: @io.to_io 92: end
Pushes back one character into the internal buffer. Unlike IO#getc, it can be called more than one time.
# File lib/bio/io/flatfile/buffer.rb, line 196 196: def ungetc(c) 197: @buffer = sprintf("%c", c) + @buffer 198: nil 199: end
Pushes back given str to the internal buffer. Returns nil. str must be read previously with the wrapper object.
Note that in current implementation, the str can be everything, but please don‘t depend on it.
# File lib/bio/io/flatfile/buffer.rb, line 178 178: def ungets(str) 179: @buffer = str + @buffer 180: nil 181: end