References
-
API reference - BinaryBuffer class documentation
-
Performance guide - Buffer optimization techniques
Concepts
Buffer operations
buffer = Messagepack::BinaryBuffer.new
buffer << "data"
buffer.read(4) # => "data"
buffer.to_s # => ""Where,
-
BinaryBuffer.newcreates a new buffer -
<<appends data to the buffer -
read(n)reads and consumes n bytes -
to_sreturns remaining data without consuming
Skip operations
buffer = Messagepack::BinaryBuffer.new
buffer << "\x81\xA3foo\xA5world"
buffer.skip # Skip one object (format byte)
buffer.skip_nil # Skip nil value if presentWhere,
-
skipskips a complete MessagePack object -
skip_nilefficiently skips nil values
Buffer with IO
File.open("data.msgpack", "rb") do |io|
buffer = Messagepack::BinaryBuffer.new(io)
unpacker = Messagepack::Unpacker.new(buffer)
obj = unpacker.read
endWhere,
-
The buffer reads from the IO when needed
-
Data is automatically managed in chunks
-
Suitable for large files that don’t fit in memory
Examples
Example 1. Reading large MessagePack files efficiently
# Process a large file without loading everything into memory
buffer = Messagepack::BinaryBuffer.new(File.open("large.msgpack", "rb"))
unpacker = Messagepack::Unpacker.new(buffer)
while obj = unpacker.read
# Process each object one at a time
process(obj)
end