Ruby IO#读取单次读取的最大长度

时间:2011-09-22 08:49:56

标签: ruby io

如何确定当前平台上单次读取时IO#读取的最大长度?

irb(main):301:0> File.size('C:/large.file') / 1024 / 1024
=> 2145
irb(main):302:0> s = IO.read 'C:/large.file'
IOError: file too big for single read

1 个答案:

答案 0 :(得分:2)

该消息来自io.c, remain_size。当文件的(剩余)大小大于或等于LONG_MAX时,会发出它。该值取决于您编译Ruby的平台。

至少在Ruby 1.8.7中,Fixnums的最大值恰好只是该值的一半(-1),所以你可以通过

获得限制
2 * 2 ** (1..128).to_a.find { | i | (1 << i).kind_of? Bignum } - 1

你不应该依赖它。