module IO::Stream::Readable
def fill_read_buffer(size = @minimum_read_size)
def fill_read_buffer(size = @minimum_read_size) # Limit the read size to avoid exceeding SSIZE_MAX and to manage memory usage. # Very large reads can also hurt interactive performance by blocking for too long. if size > @maximum_read_size size = @maximum_read_size end # This effectively ties the input and output stream together. flush if @read_buffer.empty? if sysread(size, @read_buffer) # Console.info(self, name: "read") {@read_buffer.inspect} return true end else if chunk = sysread(size, @input_buffer) @read_buffer << chunk # Console.info(self, name: "read") {@read_buffer.inspect} return true end end # else for both cases above: @finished = true return false end