35 个版本
新版本 0.16.3 | 2024 年 8 月 24 日 |
---|---|
0.16.1 | 2024 年 3 月 29 日 |
0.15.0 | 2023 年 6 月 30 日 |
0.14.3 | 2023 年 3 月 29 日 |
0.3.0 | 2021 年 3 月 5 日 |
#275 在 Rust 模式
385 每月下载量
在 2 crates 中使用
275KB
5K SLoC
这个包定义了 StreamReader
、StreamWriter
和 StreamDuplexer
类型,这些类型提供对原始 I/O 流(如标准输入、标准输出、文件、套接字、管道或字符设备)的安全、拥有、无缓冲和未上锁的访问。它还支持“管道线程”概念,其中可以提供任意 Box<dyn Read + Send>
或 Box<dyn Write + Send>
,I/O 在线程上执行,并通过 管道 连接到 StreamReader
或 StreamWriter
,以及“套接字线程”概念,其中提供的函数在线程上调用,并通过双向套接字连接到主线程。
此包还定义了 AsyncStreamReader
、AsyncStreamWriter
和 AsyncStreamDuplexer
,它们是与 async-std
一起工作的异步函数。还有 TokioStreamReader
、TokioStreamWriter
和 TokioStreamDuplexer
,它们是与 tokio
一起工作的异步函数。并非所有功能都得到了支持,并且它们还没有完全优化,但已提供基本的文件和套接字支持。
在 Posix 兼容平台上,包括对 WASI 的有限支持,这些类型只包含一个文件描述符(并实现了 AsFd
),以及任何必要的资源来安全地保持文件描述符处于活动状态。在 Windows 上,它们包含一个枚举,包含 RawHandle
或 RawSocket
。
由于这些类型是无缓冲的,对于大多数用例,建议将它们包装在缓冲类型中,例如 std::io::BufReader
、std::io::BufWriter
、std::io::LineWriter
、io_streams::BufDuplexer
或 io_streams::BufReaderLineWriter
。
Rust 的 std::io::Stdin
和 std::io::Stdout
总是带缓冲,而其 std::fs::File
和 std::net::TcpStream
是无缓冲的。`io_streams` 包的主要目的是在不添加缓冲的情况下抽象底层输入和输出,以便可以应用缓冲而不会重复。
当此包打开对应的流时,它会锁定 stdio::io::Stdin
和 std::io::Stdout
,以防止在同一个流上意外混合缓冲和非缓冲输出。当它们被锁定时尝试使用带缓冲的流将无限期阻塞。
由于异步标准和 tokio 中的 I/O 安全特性实现尚未完成,因此对 char 设备和 socketpair 的支持暂时禁用。
依赖项
~2–13MB
~164K SLoC