dotnet/Nerdbank.Streams
GitHub: dotnet/Nerdbank.Streams
为 .NET 提供专用 Stream 与管道工具,支持全双工进程内通信、多路复用和 WebSocket 适配。
Stars: 712 | Forks: 72
# 专用的 .NET Stream 类
[](https://www.nuget.org/packages/Nerdbank.Streams)
[](https://dev.azure.com/andrewarnott/OSS/_build/latest?definitionId=14)
[](https://codecov.io/gh/AArnott/Nerdbank.Streams)
*用于进程内或跨互联网通信的增强型 Stream。*
## 特性
1. [`SimplexStream`](https://dotnet.github.io/Nerdbank.Streams/docs/SimplexStream.html) 旨在允许两方进行*单向*通信。
任何写入该 stream 的内容随后都可以从中读取。您可以将这个 `Stream`
共享给任意两方(在同一个 AppDomain 中),一方可以向另一方发送消息。
2. [`FullDuplexStream`](https://dotnet.github.io/Nerdbank.Streams/docs/FullDuplexStream.html) 为进程内双向通信创建一对双向 stream;它也可以从两个
单向 stream 创建一个双向 stream。
3. [`MultiplexingStream`](https://dotnet.github.io/Nerdbank.Streams/docs/MultiplexingStream.html) 允许您将任何双向
.NET Stream 拆分为多个子 stream(称为 channel)。这使得双方只需建立
一个传输 stream(例如 named pipe 或 web socket),并将其用于许多独立的
协议。例如,可以在一个 channel 上设置 JSON-RPC,并使用其他 channel 进行
高效的二进制传输。
4. [`AsStream()`](https://dotnet.github.io/Nerdbank.Streams/docs/AsStream.html) 使用 `System.IO.Stream` 包装 `WebSocket`、`System.IO.Pipelines.PipeReader`、
`System.IO.Pipelines.PipeWriter` 或 `System.IO.Pipelines.IDuplexPipe`,以供读取和/或写入。
5. [`UsePipe()`](https://dotnet.github.io/Nerdbank.Streams/docs/UsePipe.html) 允许使用 `PipeReader` 和 `PipeWriter` API 读取
和写入 `Stream` 或 `WebSocket`。
6. [`Stream.ReadSlice(long)`](https://dotnet.github.io/Nerdbank.Streams/docs/ReadSlice.html) 创建一个在给定字节数之后结束的子 stream。
7. [`PipeReader.ReadSlice(long)`](https://dotnet.github.io/Nerdbank.Streams/docs/ReadSlice.html) 创建一个在给定字节数之后结束的子 `PipeReader`。
8. [`MonitoringStream`](https://dotnet.github.io/Nerdbank.Streams/docs/MonitoringStream.html) 包装另一个 Stream 并为
所有 I/O 调用引发事件,以便您可以监控和/或追踪通过的数据。
9. [`WriteSubstream` 和 `ReadSubstream`](https://dotnet.github.io/Nerdbank.Streams/docs/Substream.html) 允许您将未知长度的数据序列化为更大 stream 的一部分,然后在读取子 stream 时对其进行反序列化,这样您读取的字节数就不会超过写入的字节数。
10. [`Sequence`](https://dotnet.github.io/Nerdbank.Streams/docs/Sequence.html) 是 `ReadOnlySequence` 的构建器。
11. [`PrefixingBufferWriter`](https://dotnet.github.io/Nerdbank.Streams/docs/PrefixingBufferWriter.html) 包装另一个 `IBufferWriter`,允许在下一个写入的 buffer 前面添加一些 header,该 buffer 的长度可以是任意的。
12. [`BufferTextWriter`](https://dotnet.github.io/Nerdbank.Streams/docs/BufferTextWriter.html) 是一个派生自 `TextWriter` 的类型,可以
直接写入任何 `IBufferWriter`,这使其比 `StreamWriter` 具有更高的可重用性,从而允许在多个 writer 之间进行无内存分配的写入。
13. [`SequenceTextReader`](https://dotnet.github.io/Nerdbank.Streams/docs/SequenceTextReader.html) 是一个派生自 `TextReader` 的类型,可以
直接从任何 `ReadOnlySequence` 读取,这使其比 `StreamReader` 具有更高的可重用性,从而允许在多个 sequence 之间进行无内存分配的读取。
14. [`DuplexPipe`](https://dotnet.github.io/Nerdbank.Streams/docs/DuplexPipe.html) 是 `IDuplexPipe` 的一个简单实现。
15. [`Stream.ReadBlockAsync`](https://dotnet.github.io/Nerdbank.Streams/docs/ReadBlockAsync.html) 保证填满提供的 buffer,除非满足某些文档记载的条件,而不是常规 `ReadAsync` 仅保证提供至少 1 个字节。
## .NET Foundation
本项目由 [.NET Foundation](https://dotnetfoundation.org) 提供支持。
标签:WebSockets, 多人体追踪, 多路复用, 数据流, 网络通信, 进程间通信