#data-stream #data #send #variable-length #byte-length #read-stream

send-it

用于通过流或网络发送大量数据的一个工具

7个版本

0.2.2 2024年1月31日
0.2.1 2024年1月31日
0.1.5 2023年12月10日

#931 in 网络编程

Download history 7/week @ 2024-05-27 24/week @ 2024-07-01

每月下载量105

MIT许可证

25KB
365

Send-it

Crates.io Docs.rs
一个Rust包,用于通过流使用可变长度编码一起发送多个信息段。
* 此工具不压缩或加密数据。它将数据转换为字节数据流,并添加每个段的长度信息

示例

use send_it::writer::VarWriter;
use send_it::reader::VarReader;

// Create a new VarWriter
let mut writer = VarWriter::new();

// Add some sample data
writer.add_string("Hello, ");
writer.add_string("World!");

// Use any Write implementor as your stream (i.e. TcpStream)
let mut stream: Vec<u8> = Vec::new();

// encode the data and send it over the stream
writer.send(&mut stream).expect("Failed to send data");

// turn the vector into a slice as Vec does not implement Read
let mut fake_stream = stream.as_slice();

// create a new VarReader to read from the stream we wrote to
let mut reader = VarReader::new(&mut fake_stream);

// read the data from the stream
let data = reader.read_data().unwrap();
assert_eq!(data[0].to_string(), "Hello, ");
assert_eq!(data[1].to_string(), "World!");

功能

写入(默认启用)

添加VarWriter结构体,用于使用可变长度编码将数据写入流

读取(默认启用)

添加VarReader结构体,用于使用可变长度编码从流中读取数据

大端(默认禁用)

将编码更改为使用大端而不是小端

用法

VarWriter

一个结构体,用于使用可变长度编码将数据写入流
特性:'writing'(默认启用)

use send_it::writer::VarWriter;

// Create a new VarWriter
let mut writer = VarWriter::new();

// Add some sample data
writer.add_string("Hello, ");
writer.add_string("World!");

// Use any Write implementor as your stream (i.e. TcpStream)
let mut stream: Vec<u8> = Vec::new();

// encode the data and send it over the stream
writer.send(&mut stream).expect("Failed to send data");

VarReader

一个结构体,用于使用可变长度编码从流中读取数据
特性:'reading'(默认启用)

use send_it::reader::VarReader;

// Create a sample stream, this is the output from the above VarWriter example
let stream: Vec<u8> = vec![21, 7, 0, 0, 0, 72, 101, 108, 108, 111, 44, 32, 6, 0, 0, 0, 87, 111, 114, 108, 100, 33];
// turn the vector into a slice as Vec does not implement Read
let mut fake_stream = stream.as_slice();

// create a new VarReader
let mut reader = VarReader::new(&mut fake_stream);

// read the data from the stream
let data = reader.read_data().unwrap();
assert_eq!(data[0].to_string(), "Hello, ");
assert_eq!(data[1].to_string(), "World!");

Segment

一个结构体,用于表示数据段

use send_it::Segment;
let mut segment = Segment::new();
segment.append(Segment::from("Hello, "));
segment.append(Segment::from("World!"));
assert_eq!(segment.to_string(), "Hello, World!");

依赖

~0–1.2MB
~20K SLoC