#io #bit #bitstream #binary #io-read #read-write #deserialize

endio_bit

位级读取和写入,模仿 std::io::{BufReader, BufWriter}

2个不稳定版本

0.2.0 2020年4月5日
0.1.0 2019年2月26日

#1340 in 编码

Download history 6/week @ 2024-02-19 20/week @ 2024-02-26 6/week @ 2024-03-04 9/week @ 2024-03-11 4/week @ 2024-03-18 3/week @ 2024-03-25 60/week @ 2024-04-01

每月下载量77
ahuff中使用

AGPL-3.0-or-later

34KB
558

endio_bit

位级读取和写入

std::io::{Read, Write}仅允许在字节级别上进行读取和写入。当与使用单个位或大小不是8位倍数的结构的协议一起工作时,这并不足够。此crate提供了读取和写入的包装器,使任何实现Read/Write的对象都可以进行位级I/O。

包装器模仿std::io::BufReaderstd::io::BufWriter,因此其语义和接口应该熟悉且健壮。

此crate是一个专注于位级I/O的最小化低级抽象。如果您还需要字节级I/O或(反)序列化支持,则建议与endio一起使用此crate。但是,此crate完全独立于endio,并且可以在仅需要带有位支持的std::io的情况下单独使用。

此crate的目标

  • 读取和写入单个位。
  • 读取和写入不是8的倍数的位。
  • 即使在底层对象进行了位移的情况下也能进行读取和写入。
  • 支持位字节序转换/区分。

此crate的非目标

  • 数据类型(反)序列化。如果您需要此功能,请使用与此crate一起的endio
  • 字节序转换/区分。如果您需要这个功能,请结合使用此 crate 中的 endio

与其他 crate 的比较

位级 I/O 是一个常见问题,在 crates.io 上有许多 crate 试图提供解决方案。然而,我尚未找到一个完全令人满意的解决方案。以下是相关 crate 的列表以及它们与这个 crate 的不同之处

  • av-bitstream - 包含(反)序列化和字节序。不支持位级写入。未提供文档。

  • bit-io - 不实现 std::io::{Read, Write}。不支持位序。未提供文档。

  • bitio - 不支持写入。不支持位序。

  • bitstreambitstream_readerbitter - 包含(反)序列化和字节序。不支持写入。

  • bitstream-io - 包含(反)序列化和字节序。由于某种原因,包含了霍夫曼树。不实现 std::io::{Read, Write}

  • bitstream-rs - 仅支持读取和写入单个位。不实现 std::io::{Read, Write}

  • bitreader - 仅支持读取。包含在强制大端模式下的反序列化,不支持小端模式。

因此,目前库的情况还有改进的空间,我希望通过这个 crate 来解决这个问题。

无运行时依赖