class Avro::IO::BinaryEncoder
Write leaf values
Attributes
Public Class Methods
# File lib/avro/io.rb 153 def initialize(writer) 154 @writer = writer 155 end
Public Instance Methods
Write an arbritary datum.
# File lib/avro/io.rb 217 def write(datum) 218 writer.write(datum) 219 end
a boolean is written as a single byte whose value is either 0 (false) or 1 (true).
# File lib/avro/io.rb 164 def write_boolean(datum) 165 on_disk = datum ? 1.chr : 0.chr 166 writer.write(on_disk) 167 end
Bytes are encoded as a long followed by that many bytes of data.
# File lib/avro/io.rb 204 def write_bytes(datum) 205 write_long(datum.bytesize) 206 @writer.write(datum) 207 end
A double is written as 8 bytes. The double is converted into a 64-bit integer using a method equivalent to Java’s doubleToLongBits and then encoded in little-endian format.
# File lib/avro/io.rb 199 def write_double(datum) 200 @writer.write([datum].pack('E')) 201 end
A float is written as 4 bytes. The float is converted into a 32-bit integer using a method equivalent to Java’s floatToIntBits and then encoded in little-endian format.
# File lib/avro/io.rb 191 def write_float(datum) 192 @writer.write([datum].pack('e')) 193 end
int and long values are written using variable-length, zig-zag coding.
# File lib/avro/io.rb 171 def write_int(n) 172 write_long(n) 173 end
int and long values are written using variable-length, zig-zag coding.
# File lib/avro/io.rb 177 def write_long(n) 178 foo = n 179 n = (n << 1) ^ (n >> 63) 180 while (n & ~0x7F) != 0 181 @writer.write(((n & 0x7f) | 0x80).chr) 182 n >>= 7 183 end 184 @writer.write(n.chr) 185 end
null is written as zero bytes
# File lib/avro/io.rb 158 def write_null(datum) 159 nil 160 end
A string is encoded as a long followed by that many bytes of UTF-8 encoded character data
# File lib/avro/io.rb 211 def write_string(datum) 212 datum = datum.encode('utf-8') if datum.respond_to? :encode 213 write_bytes(datum) 214 end