RubyのIO.getcが遅い件

IO.readで比較、IO.getcで比較、最後に両ファイルのMD5を計算という実験をしてみました。
getc >>> read > MD5 と予想してたのに、結果はread > MD5 >>>>>>>>>> getcといった感じに。
以下は220MBの同一ファイルを比較したときの速度。

1回 2回 3回 4回 5回 平均
read 1.55247 3.064115 3.240504 3.265657 3.259735 2.8764962
getc 145.975028 146.703321 148.11222 145.655821 145.559771 146.4012322
MD5 2.815759 4.647561 4.666489 4.563829 4.646109 4.2679494

readとgetcで50倍の差が出るとは予想外。書き方が悪いのかな。
とりあえず、ファイル比較にはread使うのが良さそう。

def bineql_read?(f1, f2)
  open(f1, "rb") do |io1|
    open(f2, "rb") do |io2|
      return false if io1.read != io2.read
    end
  end
  return true
end

def bineql_getc?(f1, f2)
  open(f1, "rb") do |io1|
    open(f2, "rb") do |io2|
      while c1 = io1.getc
        return false if c1 != io2.getc
      end
    end
  end
  return true
end

p Digest::MD5.hexdigest(File.open(f1).read )
p Digest::MD5.hexdigest(File.open(f2).read )