class IO::Memory
inherits IO
¶
An IO
that reads and writes from a buffer in memory.
The internal buffer can be resizeable and/or writeable depending
on how an IO::Memory
is constructed.
Class methods¶
.new(capacity : Int = 64)
¶
(capacity : Int = 64)
Creates an empty, resizeable and writeable IO::Memory
with the given
initial capacity for the internal buffer.
io = IO::Memory.new
slice = Bytes.new(1)
io.pos # => 0
io.read(slice) # => 0
slice # => Bytes[0]
.new(string : String)
¶
(string : String)
Creates an IO::Memory
whose contents are the exact contents of string.
The created IO::Memory
is non-resizeable and non-writeable.
The IO
starts at position zero for reading.
io = IO::Memory.new "hello"
io.pos # => 0
io.gets(2) # => "he"
io.print "hi" # raises IO::Error
.new(slice : Bytes, writeable = true)
¶
(slice : Bytes, writeable = true)
Creates an IO::Memory
that will read, and optionally write, from/to
the given slice. The created IO::Memory
is non-resizeable.
The IO starts at position zero for reading.
slice = Slice.new(6) { |i| ('a'.ord + i).to_u8 }
io = IO::Memory.new slice, writeable: false
io.pos # => 0
io.read(slice) # => 6
String.new(slice) # => "abcdef"
Methods¶
#clear
¶
Clears the internal buffer and resets the position to zero.
Raises if this IO::Memory
is non-resizeable.
io = IO::Memory.new
io << "abc"
io.rewind
io.gets(1) # => "a"
io.clear
io.pos # => 0
io.gets_to_end # => ""
io = IO::Memory.new "hello"
io.clear # raises IO::Error
#close
¶
Closes this IO
. Further operations on this IO
will raise an IO::Error
.
io = IO::Memory.new "hello"
io.close
io.gets_to_end # raises IO::Error (closed stream)
#closed? : Bool
¶
: Bool
Determines if this IO
is closed.
io = IO::Memory.new "hello"
io.closed? # => false
io.close
io.closed? # => true
#empty?
¶
Returns true
if this IO::Memory
has no contents.
io = IO::Memory.new
io.empty? # => true
io.print "hello"
io.empty? # => false
#pos : Int32
¶
: Int32
Returns the current position (in bytes) of this IO
.
io = IO::Memory.new "hello"
io.pos # => 0
io.gets(2) # => "he"
io.pos # => 2
#pos=(value)
¶
(value)
Sets the current position (in bytes) of this IO
.
io = IO::Memory.new "hello"
io.pos = 3
io.gets # => "lo"
#read_at(offset, bytesize, & : IO -> )
¶
(offset, bytesize, & : IO -> )
Yields an IO::Memory
to read a section of this IO
's buffer.
During the block duration self
becomes read-only,
so multiple concurrent open are allowed.
#rewind
¶
Rewinds this IO
to the initial position (zero).
io = IO::Memory.new "hello"
io.gets(2) # => "he"
io.rewind
io.gets(2) # => "he"
#seek(offset, whence : Seek = Seek::Set)
¶
(offset, whence : Seek = Seek::Set)
Seeks to a given offset (in bytes) according to the whence argument.
io = IO::Memory.new("abcdef")
io.gets(3) # => "abc"
io.seek(1, IO::Seek::Set)
io.gets(2) # => "bc"
io.seek(-1, IO::Seek::Current)
io.gets(1) # => "c"
#size : Int32
¶
: Int32
Returns the total number of bytes in this IO
.
io = IO::Memory.new "hello"
io.size # => 5
#to_s : String
¶
: String
Returns a new String
that contains the contents of the internal buffer.
io = IO::Memory.new
io.print 1, 2, 3
io.to_s # => "123"
#to_slice : Bytes
¶
: Bytes
Returns the underlying bytes.
io = IO::Memory.new
io.print "hello"
io.to_slice # => Bytes[104, 101, 108, 108, 111]
#write(slice : Bytes) : Nil
¶
(slice : Bytes) : Nil
See IO#write(slice)
. Raises if this IO::Memory
is non-writeable,
or if it's non-resizeable and a resize is needed.
#write_byte(byte : UInt8)
¶
(byte : UInt8)
See IO#write_byte
. Raises if this IO::Memory
is non-writeable,
or if it's non-resizeable and a resize is needed.