class Avro::IO::BinaryEncoder
Write leaf values
Attributes
Public Class Methods
# File lib/avro/io.rb 171 def initialize(writer) 172 @writer = writer 173 end
Public Instance Methods
Write an arbritary datum.
# File lib/avro/io.rb 234 def write(datum) 235 writer.write(datum) 236 end
a boolean is written as a single byte whose value is either 0 (false) or 1 (true).
# File lib/avro/io.rb 182 def write_boolean(datum) 183 on_disk = datum ? 1.chr : 0.chr 184 writer.write(on_disk) 185 end
Bytes are encoded as a long followed by that many bytes of data.
# File lib/avro/io.rb 221 def write_bytes(datum) 222 write_long(datum.bytesize) 223 @writer.write(datum) 224 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 216 def write_double(datum) 217 @writer.write([datum].pack('E')) 218 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 208 def write_float(datum) 209 @writer.write([datum].pack('e')) 210 end
int and long values are written using variable-length, zig-zag coding.
# File lib/avro/io.rb 189 def write_int(n) 190 write_long(n) 191 end
int and long values are written using variable-length, zig-zag coding.
# File lib/avro/io.rb 195 def write_long(n) 196 n = (n << 1) ^ (n >> 63) 197 while (n & ~0x7F) != 0 198 @writer.write(((n & 0x7f) | 0x80).chr) 199 n >>= 7 200 end 201 @writer.write(n.chr) 202 end
null is written as zero bytes
# File lib/avro/io.rb 176 def write_null(_datum) 177 nil 178 end
A string is encoded as a long followed by that many bytes of UTF-8 encoded character data
# File lib/avro/io.rb 228 def write_string(datum) 229 datum = datum.encode('utf-8') if datum.respond_to? :encode 230 write_bytes(datum) 231 end