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
我如何確定在當前平臺的單次讀取中讀取的最大長度?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
該消息來自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
得到限制你還是不要依賴那。
我在閱讀50 GB文件時發生了同樣的錯誤,上面給出了帶有Ruby 2.1.2和1.9.3的9223372036854775807,甚至在Linux上爲1.8.7。 – philant