2011-09-22 42 views
2

我如何確定在當前平臺的單次讀取中讀取的最大長度?Ruby 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 

回答

2

該消息來自io.c, remain_size。當文件的(剩餘)大小大於或等於LONG_MAX時發出。該值取決於您的Ruby已編譯的平臺。

至少在紅寶石1.8.7,爲Fixnums最大值恰好是這一點的值(-1)的一半,所以你可以通過

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

得到限制你還是不要依賴那。

+0

我在閱讀50 GB文件時發生了同樣的錯誤,上面給出了帶有Ruby 2.1.2和1.9.3的9223372036854775807,甚至在Linux上爲1.8.7。 – philant