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.
Peeks into this IO, if possible.
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.
Reads a single byte from this IO.
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.
Reads and discards bytes from self until there are no more bytes.
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
Reference
Object
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
Peeks into this IO, if possible.
It returns:
nil if this IO isn't peekable at this moment or at allThe returned bytes are only valid data until a next call to any method that reads from this IO is invoked.
By default this method returns nil, but IO implementations that provide buffering or wrap other IOs should override this method.
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
Reads and discards bytes from self until there are no more bytes.
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–2026 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/1.19.0/IO/Memory.html