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