28 releases
0.1.27 | Apr 8, 2024 |
---|---|
0.1.24 | Feb 1, 2024 |
0.1.21 | Nov 10, 2023 |
0.1.19 | Jan 23, 2023 |
0.1.4 | Jun 27, 2021 |
#829 in Network programming
11,831 downloads per month
Used in 63 crates
(18 directly)
240KB
4.5K
SLoC
Bytes
A utility library for working with bytes. This is fork of bytes crate (https://github.com/tokio-rs/bytes)
Usage
To use ntex-bytes
, first add this to your Cargo.toml
:
[dependencies]
ntex-bytes = "0.1"
Next, add this to your crate:
use ntex_bytes::{Bytes, BytesMut, Buf, BufMut};
Serde support
Serde support is optional and disabled by default. To enable use the feature serde
.
[dependencies]
ntex-bytes = { version = "0.1", features = ["serde"] }
License
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
lib.rs
:
Provides abstractions for working with bytes.
This is fork of bytes crate
The ntex-bytes
crate provides an efficient byte buffer structure
(Bytes
) and traits for working with buffer
implementations (Buf
, BufMut
).
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:
use ntex_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.
Dependencies
~330–660KB
~13K SLoC