mirror of
https://github.com/ruby/ruby.git
synced 2026-08-16 12:27:27 +08:00
(https://github.com/ruby/stringio/pull/197) Previous doc merely linked to `IO#read`; new doc stays local, shows examples using `StringIO`. https://github.com/ruby/stringio/commit/e8b66f8cdd
84 lines
2.8 KiB
Plaintext
84 lines
2.8 KiB
Plaintext
Reads and returns a string containing bytes read from the stream,
|
|
beginning at the current position;
|
|
advances the position by the count of bytes read.
|
|
|
|
With no arguments given,
|
|
reads all remaining bytes in the stream;
|
|
returns a new string containing bytes read:
|
|
|
|
strio = StringIO.new('Hello') # Five 1-byte characters.
|
|
strio.read # => "Hello"
|
|
strio.pos # => 5
|
|
strio.read # => ""
|
|
StringIO.new('').read # => ""
|
|
|
|
With non-negative argument +maxlen+ given,
|
|
reads +maxlen+ bytes as available;
|
|
returns a new string containing the bytes read, or +nil+ if none:
|
|
|
|
strio.rewind
|
|
strio.read(3) # => "Hel"
|
|
strio.read(3) # => "lo"
|
|
strio.read(3) # => nil
|
|
|
|
russian = 'Привет' # Six 2-byte characters.
|
|
russian.b
|
|
# => "\xD0\x9F\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82"
|
|
strio = StringIO.new(russian)
|
|
strio.read(6) # => "\xD0\x9F\xD1\x80\xD0\xB8"
|
|
strio.read(6) # => "\xD0\xB2\xD0\xB5\xD1\x82"
|
|
strio.read(6) # => nil
|
|
|
|
japanese = 'こんにちは'
|
|
japanese.b
|
|
# => "\xE3\x81\x93\xE3\x82\x93\xE3\x81\xAB\xE3\x81\xA1\xE3\x81\xAF"
|
|
strio = StringIO.new(japanese)
|
|
strio.read(9) # => "\xE3\x81\x93\xE3\x82\x93\xE3\x81\xAB"
|
|
strio.read(9) # => "\xE3\x81\xA1\xE3\x81\xAF"
|
|
strio.read(9) # => nil
|
|
|
|
With argument +max_len+ as +nil+ and string argument +out_string+ given,
|
|
reads the remaining bytes in the stream;
|
|
clears +out_string+ and writes the bytes into it;
|
|
returns +out_string+:
|
|
|
|
out_string = 'Will be overwritten'
|
|
strio = StringIO.new('Hello')
|
|
strio.read(nil, out_string) # => "Hello"
|
|
strio.read(nil, out_string) # => ""
|
|
|
|
With non-negative argument +maxlen+ and string argument +out_string+ given,
|
|
reads the +maxlen bytes from the stream, as availble;
|
|
clears +out_string+ and writes the bytes into it;
|
|
returns +out_string+ if any bytes were read, or +nil+ if none:
|
|
|
|
out_string = 'Will be overwritten'
|
|
strio = StringIO.new('Hello')
|
|
strio.read(3, out_string) # => "Hel"
|
|
strio.read(3, out_string) # => "lo"
|
|
strio.read(3, out_string) # => nil
|
|
|
|
out_string = 'Will be overwritten'
|
|
strio = StringIO.new(russian)
|
|
strio.read(6, out_string) # => "При"
|
|
strio.read(6, out_string) # => "вет"
|
|
strio.read(6, out_string) # => nil
|
|
strio.rewind
|
|
russian.b
|
|
# => "\xD0\x9F\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82"
|
|
strio.read(3) # => "\xD0\x9F\xD1"
|
|
strio.read(3) # => "\x80\xD0\xB8"
|
|
|
|
out_string = 'Will be overwritten'
|
|
strio = StringIO.new(japanese)
|
|
strio.read(9, out_string) # => "こんに"
|
|
strio.read(9, out_string) # => "ちは"
|
|
strio.read(9, out_string) # => nil
|
|
strio.rewind
|
|
japanese.b
|
|
# => "\xE3\x81\x93\xE3\x82\x93\xE3\x81\xAB\xE3\x81\xA1\xE3\x81\xAF"
|
|
strio.read(4) # => "\xE3\x81\x93\xE3"
|
|
strio.read(4) # => "\x82\x93\xE3\x81"
|
|
|
|
Related: #gets, #readlines.
|