本文简要介绍ruby语言中 IO.read
的用法。
用法
read(maxlen = nil) → string or nil
read(maxlen = nil, out_string) → out_string or nil
从流中读取字节(二进制模式):
-
如果
maxlen
是nil
,则读取所有字节。 -
否则读取
maxlen
字节(如果可用)。 -
否则读取所有字节。
返回包含读取的字节的字符串(新字符串或给定的 out_string
)。字符串的编码取决于 maxLen
和 out_string
:
-
maxlen
isnil
:使用self
的内部编码(不管是否给出了out_string
)。 -
maxlen
不是nil
:-
out_string
给定:out_string
的编码未修改。 -
out_string
未给出:使用 ASCII-8BIT。
-
没有参数 out_string
当参数out_string
被省略时,返回值是一个新字符串:
f = File.new('t.txt')
f.read
# => "This is line one.\nThis is the second line.\nThis is the third line.\n"
f.rewind
f.read(40) # => "This is line one.\r\nThis is the second li"
f.read(40) # => "ne.\r\nThis is the third line.\r\n"
f.read(40) # => nil
如果maxlen
为零,则返回一个空字符串。
带参数out_string
当给定参数 out_string
时,返回值为 out_string
,其内容被替换:
f = File.new('t.txt')
s = 'foo' # => "foo"
f.read(nil, s) # => "This is line one.\nThis is the second line.\nThis is the third line.\n"
s # => "This is line one.\nThis is the second line.\nThis is the third line.\n"
f.rewind
s = 'bar'
f.read(40, s) # => "This is line one.\r\nThis is the second li"
s # => "This is line one.\r\nThis is the second li"
s = 'baz'
f.read(40, s) # => "ne.\r\nThis is the third line.\r\n"
s # => "ne.\r\nThis is the third line.\r\n"
s = 'bat'
f.read(40, s) # => nil
s # => ""
请注意,此方法的行为类似于 C 中的 fread() 函数。这意味着它会重试调用 read(2) 系统调用以使用指定的 maxlen(或直到 EOF)读取数据。
即使流处于非阻塞模式,也会保留此行为。 (此方法与其他方法一样对非阻塞标志不敏感。)
如果您需要像单个 read(2) 系统调用这样的行为,请考虑 readpartial
、 read_nonblock
和 sysread
。
相关用法
- Ruby IO.read用法及代码示例
- Ruby IO.readlines用法及代码示例
- Ruby IO.readchar用法及代码示例
- Ruby IO.readpartial用法及代码示例
- Ruby IO.read_nonblock用法及代码示例
- Ruby IO.rewind用法及代码示例
- Ruby IO.reopen用法及代码示例
- Ruby IO.raw用法及代码示例
- Ruby IO.eof用法及代码示例
- Ruby IO.fileno用法及代码示例
- Ruby IO.pread用法及代码示例
- Ruby IO.to_i用法及代码示例
- Ruby IO.self << object用法及代码示例
- Ruby IO.tty?用法及代码示例
- Ruby IO.close_write用法及代码示例
- Ruby IO.write_nonblock用法及代码示例
- Ruby IO.set_encoding_by_bom用法及代码示例
- Ruby IO.syswrite用法及代码示例
- Ruby IO.close_read用法及代码示例
- Ruby IO.stat用法及代码示例
- Ruby IO.pwrite用法及代码示例
- Ruby IO.ungetc用法及代码示例
- Ruby IO.noecho用法及代码示例
- Ruby IO.new用法及代码示例
- Ruby IO.sysopen用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 IO.read。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。