#buffer #byte #io #io-operations #performance #pool #cpu

byte_buffer

A buffer-pool library aimed to provide performant and reused byte buffers for IO code

3 releases

0.1.3 Feb 1, 2021
0.1.2 Aug 29, 2019
0.1.1 Aug 5, 2019
0.1.0 Feb 12, 2019

#27 in #io-operations


Used in sync_tools

MIT license

23KB
549 lines

Byte_Buffer

Byte_Buffer on crates.io Byte_Buffer on docs.rs

What is this

This crate provides an easy-to-use and manageable byte buffer in frequent I/O operations, where implementations of the Read/Write traits are used extensively. With our pre-allocated buffer pool, your I/O code can save tons of wasted CPU cycles for dynamic buffer allocations, which are often the bottleneck of the throughout performance.

Use this crate

To use this crate, add the crate dependency in your project's Cargo.toml file:

[dependencies]
byte_buffer = "0.1"

Then you can use the buffer, after declaring the amount of buffer instances to be initialized, and the capacity of each instance.

extern crate byte_buffer;
use byte_buffer::prelude::*;

fn main() {
    // Count of buffer: 10; Buffer capacity: 3
    ByteBuffer::init(10, 3);

    // Slice the buffer for use in your code
    let mut buffer = ByteBuffer::slice();
    
    // Fill the buffer with some byte data
    io::repeat(0b101).read_exact(buffer.as_writable().unwrap()).unwrap();
    
    // Read the data out. The buffer will be released back to the pool after going out of the scope
    assert_eq!(buffer.as_readable().unwrap(), [0b101, 0b101, 0b101]);
}

Contributions are welcome!

Please feel free to submit bug reports or features.

Dependencies

~395KB