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.
Creates an empty, resizeable and writeable IO::Memory with the given initial capacity for the internal buffer.
Creates an IO::Memory whose contents are the exact contents of string.
Creates an IO::Memory that will read, and optionally write, from/to the given slice.
Same as #size.
Clears the internal buffer and resets the position to zero.
Closes this IO.
Determines if this IO is closed.
Returns true if this IO::Memory has no contents.
Returns the current position (in bytes) of this IO.
Sets the current position (in bytes) of this IO.
See IO#read(slice).
Yields an IO::Memory to read a section of this IO's buffer.
Rewinds this IO to the initial position (zero).
Seeks to a given offset (in bytes) according to the whence argument.
Returns the total number of bytes in this IO.
Appends this internal buffer to the given IO.
Returns a new String that contains the contents of the internal buffer.
Returns the underlying bytes.
See IO#write(slice).
See IO#write_byte.
IO
IO
Reference
Reference
Object
Object
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]
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
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" 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
Determines if this IO is closed.
io = IO::Memory.new "hello" io.closed? # => false io.close io.closed? # => true
Returns true if this IO::Memory has no contents.
io = IO::Memory.new io.empty? # => true io.print "hello" io.empty? # => false
Returns the current position (in bytes) of this IO.
io = IO::Memory.new "hello" io.pos # => 0 io.gets(2) # => "he" io.pos # => 2
Sets the current position (in bytes) of this IO.
io = IO::Memory.new "hello" io.pos = 3 io.gets # => "lo"
See IO#read(slice).
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.
Rewinds this IO to the initial position (zero).
io = IO::Memory.new "hello" io.gets(2) # => "he" io.rewind io.gets(2) # => "he"
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" Returns the total number of bytes in this IO.
io = IO::Memory.new "hello" io.size # => 5
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"
Returns the underlying bytes.
io = IO::Memory.new io.print "hello" io.to_slice # => Bytes[104, 101, 108, 108, 111]
See IO#write(slice). Raises if this IO::Memory is non-writeable, or if it's non-resizeable and a resize is needed.
See IO#write_byte. Raises if this IO::Memory is non-writeable, or if it's non-resizeable and a resize is needed.
© 2012–2020 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/0.35.1/IO/Memory.html