class
Bakelite::SynchronizedIO
- Bakelite::SynchronizedIO
- IO
- Reference
- Object
Overview
Thread-safe synchronized IO wrapper providing atomic seek-and-read operations for concurrent readers accessing the same container source.
Defined in:
bakelite/file_io.crConstructors
Instance Method Summary
-
#close : Nil
Closes this
IO. -
#closed? : Bool
Returns
trueif thisIOis closed. - #io : IO
- #mutex : Thread::Mutex
-
#pos : Int64
Returns the current position (in bytes) in this
IO. -
#read(slice : Bytes) : Int32
Reads at most slice.size bytes from this
IOinto slice. -
#read_at(offset : Int64, slice : Bytes) : Nil
Atomically seeks to offset and reads exact slice
- #seek(offset : Int, whence : IO::Seek = IO::Seek::Set) : self
-
#write(slice : Bytes) : Nil
Writes the contents of slice into this
IO.
Constructor Detail
Instance Method Detail
Closes this IO.
IO defines this is a no-op method, but including types may override.
Returns true if this IO is closed.
IO defines returns false, but including types may override.
Returns the current position (in bytes) in this IO.
The IO class raises on this method, but some subclasses, notable
IO::FileDescriptor and IO::Memory implement it.
File.write("testfile", "hello")
file = File.new("testfile")
file.pos # => 0
file.gets(2) # => "he"
file.pos # => 2
Reads at most slice.size bytes from this IO into slice.
Returns the number of bytes read, which is 0 if and only if there is no
more data to read (so checking for 0 is the way to detect end of file).
io = IO::Memory.new "hello"
slice = Bytes.new(4)
io.read(slice) # => 4
slice # => Bytes[104, 101, 108, 108]
io.read(slice) # => 1
slice # => Bytes[111, 101, 108, 108]
io.read(slice) # => 0
Writes the contents of slice into this IO.
io = IO::Memory.new
slice = Bytes.new(4) { |i| ('a'.ord + i).to_u8 }
io.write(slice)
io.to_s # => "abcd"