On Dec 5, 6:59 pm, Steve Midgley <midgley.st... / gmail.com> wrote: > Hi Ruby people, > > I'm wondering what the functional and performance differences might be > between the two statements below? Assume 'io' is an IO instance with > gobs of data in it. Assume 'file' is an open file instance with write > access: > > until io.eof? do > file.write(io.read(10485760)) > end > > buffer = '' > until io.eof? do > buffer = io.read(10485760) > file.write(buffer) > end > > I see that Ruby provides for a buffer and I'm wondering what the > reason is? I read this article but am still not clear on the benefit > of a buffer at all: > > http://rcoder.net/content/fast-ruby-io > > I'm wondering if providing a buffer might reduce malloc issues and > speed things up? I can't see any other reason to use one.. > > Thanks in advance for any information! > > Steve $ ri IO#buffer ---------------------------------------------------------------- IO#read ios.read([length [, buffer]]) => string, buffer, or nil ------------------------------------------------------------------------ Reads at most _length_ bytes from the I/O stream, or to the end of file if _length_ is omitted or is +nil+. _length_ must be a non-negative integer or nil. If the optional _buffer_ argument is present, it must reference a String, which will receive the data. At end of file, it returns +nil+ or +""+ depend on _length_. +_ios_.read()+ and +_ios_.read(nil)+ returns +""+. +_ios_.read(_positive-integer_)+ returns nil. f = File.new("testfile") f.read(16) #=> "This is line one" So... buffer = "" file.write(io.read(nil, buffer)) print "I read this stuff ", buffer, "\n" Regards, Jordan