当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby IO.read用法及代码示例


本文简要介绍ruby语言中 IO.read 的用法。

用法

read(maxlen = nil) → string or nil
read(maxlen = nil, out_string) → out_string or nil

从流中读取字节(二进制模式):

  • 如果 maxlennil ,则读取所有字节。

  • 否则读取 maxlen 字节(如果可用)。

  • 否则读取所有字节。

返回包含读取的字节的字符串(新字符串或给定的 out_string )。字符串的编码取决于 maxLenout_string

  • maxlen is nil :使用 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-lang.org大神的英文原创作品 IO.read。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。