Calling `str.bytes.to_a` is probably expensive. I only ever need to read the first 4. Maybe I should use `each_byte`.