ios.each_byte {|byte| block } → nil
Calls the given block once for each byte (0..255) in ios, passing the byte as an argument. The stream must be opened for reading or an IOError will be raised.
f = File.new("testfile") checksum = 0 f.each_byte {|x| checksum ^= x } #=> #<file:testfile> checksum #=> 12</file:testfile>
Source Code
/* * call-seq: * ios.each_byte {|byte| block } => nil * * Calls the given block once for each byte (0..255) in <em>ios</em>, * passing the byte as an argument. The stream must be opened for * reading or an <code>IOError</code> will be raised. * * f = File.new("testfile") * checksum = 0 * f.each_byte {|x| checksum ^= x } #=> #<File:testfile> * checksum #=> 12 */ static VALUE rb_io_each_byte(io) VALUE io; { OpenFile *fptr; FILE *f; int c; GetOpenFile(io, fptr); for (;;) { rb_io_check_readable(fptr); f = fptr->f; READ_CHECK(f); clearerr(f); TRAP_BEG; c = getc(f); TRAP_END; if (c == EOF) { if (ferror(f)) { clearerr(f); if (!rb_io_wait_readable(fileno(f))) rb_sys_fail(fptr->path); continue; } break; } rb_yield(INT2FIX(c & 0xff)); } if (ferror(f)) rb_sys_fail(fptr->path); return io; }
<code/>and<pre/>for code samples.