2007/7/17, Joel VanderWerf <vjoel / path.berkeley.edu>:
> Travis D Warlick Jr wrote:
> > Joel VanderWerf wrote:
> >> Travis D Warlick Jr wrote:
> >>> Lionel Bouton wrote:
> >>>
> >>>     while buffer[0...512] = file.read(512)
> >>>
> >> Do you mean file.read(512, buffer) ?
> >
> > Ahh, yes.  That would be an much prettier way to do it.
> >
> >     while file.read(512, buffer)
>
> It's not just prettier. With an assignment like
>
> buffer[0...512] = file.read(512)
>
> there is an intermediate string that instantly becomes garbage.

There is a better way to do it:

buffer = "." * 1024
while STDIN.read(1024, buffer)
  print buffer
end

So the original code should be rewritten as

File.open file_path do |file|
  buffer = "." * 512
  while file.read(512, buffer)
    stream_host_connection.write buffer
    stream_host_connection.flush
  end
end

The main point being here to reuse the buffer.  No C extension needed.
 See http://www.ruby-doc.org/core/classes/IO.html#M002295

Kind regards

robert