Name Description Size
buf
bytes.rs 35899
bytes_mut.rs ===== BytesMut ===== 52899
fmt
lib.rs Provides abstractions for working with bytes. The `bytes` crate provides an efficient byte buffer structure ([`Bytes`](struct.Bytes.html)) and traits for working with buffer implementations ([`Buf`], [`BufMut`]). [`Buf`]: trait.Buf.html [`BufMut`]: trait.BufMut.html # `Bytes` `Bytes` is an efficient container for storing and operating on contiguous slices of memory. It is intended for use primarily in networking code, but could have applications elsewhere as well. `Bytes` values facilitate zero-copy network programming by allowing multiple `Bytes` objects to point to the same underlying memory. This is managed by using a reference count to track when the memory is no longer needed and can be freed. A `Bytes` handle can be created directly from an existing byte store (such as `&[u8]` or `Vec<u8>`), but usually a `BytesMut` is used first and written to. For example: ```rust use bytes::{BytesMut, BufMut}; let mut buf = BytesMut::with_capacity(1024); buf.put(&b"hello world"[..]); buf.put_u16(1234); let a = buf.split(); assert_eq!(a, b"hello world\x04\xD2"[..]); buf.put(&b"goodbye world"[..]); let b = buf.split(); assert_eq!(b, b"goodbye world"[..]); assert_eq!(buf.capacity(), 998); ``` In the above example, only a single buffer of 1024 is allocated. The handles `a` and `b` will share the underlying buffer and maintain indices tracking the view into the buffer represented by the handle. See the [struct docs] for more details. [struct docs]: struct.Bytes.html # `Buf`, `BufMut` These two traits provide read and write access to buffers. The underlying storage may or may not be in contiguous memory. For example, `Bytes` is a buffer that guarantees contiguous memory, but a [rope] stores the bytes in disjoint chunks. `Buf` and `BufMut` maintain cursors tracking the current position in the underlying byte storage. When bytes are read or written, the cursor is advanced. [rope]: https://en.wikipedia.org/wiki/Rope_(data_structure) ## Relation with `Read` and `Write` At first glance, it may seem that `Buf` and `BufMut` overlap in functionality with `std::io::Read` and `std::io::Write`. However, they serve different purposes. A buffer is the value that is provided as an argument to `Read::read` and `Write::write`. `Read` and `Write` may then perform a syscall, which has the potential of failing. Operations on `Buf` and `BufMut` are infallible. 3520
loom.rs 772
serde.rs 2591