1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
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.
|