Encoding 如何在Go中将位保存到文件中

Encoding 如何在Go中将位保存到文件中,encoding,go,bits,Encoding,Go,Bits,我想在Go中序列化一些数据,我必须写入各个位。(专门用于哈夫曼编码)。最好的方法是什么?最明显的方法是一次只取8位,将前一位向左移动7位,用下一位移动6位,依此类推 我想知道是否有更惯用的方法来实现这一点,可能是标准库中的函数。我已经看过encoding/gob,但是它似乎没有提供我想要的控制,例如,编写一个由4个布尔值组成的切片(我认为它对应于位)输出24字节。我猜它有数字表示切片开始,布尔下一步等 有什么好办法吗?编码/gob是go值的二进制编码。它与位操作没有任何关系。它的主要目的是为通过

我想在Go中序列化一些数据,我必须写入各个位。(专门用于哈夫曼编码)。最好的方法是什么?最明显的方法是一次只取8位,将前一位向左移动7位,用下一位移动6位,依此类推

我想知道是否有更惯用的方法来实现这一点,可能是标准库中的函数。我已经看过encoding/gob,但是它似乎没有提供我想要的控制,例如,编写一个由4个布尔值组成的切片(我认为它对应于位)输出24字节。我猜它有数字表示切片开始,布尔下一步等


有什么好办法吗?

编码/gob是go值的二进制编码。它与位操作没有任何关系。它的主要目的是为通过网络连接等传输go数据结构(特别是rpc包)提供性能解决方案

golang对切片的内部表示是一个结构,包含指向数组(适当类型)的指针和两个int,一个用于
len
gth(即切片中的元素数)和
cap
acity(即为数组分配的内存量)

我认为标准库中不支持您想要完成的任务,因此我认为您需要按照您自己的建议编写自己的实现

也许你可以把相关的代码放在一个单独的包中并分享,go是一种年轻的语言,我认为它需要这样的实现


很抱歉,我无法提供更多帮助。

Do您想用Go only或其他语言/工具读回序列化数据吗?如果您的“位”实际的布尔值在一个片中吗?最好用其他语言读回。gob的问题是,生成的文件会比仅仅是位的文件大得多,而不仅仅是将位编码成一个或多个uint,然后以字节或ascii码的形式写入光盘。顺便说一句:即使24个字节比1个字节大得多t仍然没什么。不用担心,还有一个问题,因为我对Go习语不太熟悉。如果我要把它做成一个包,最明显的事情就是要有一个函数,可以写入一个字节片,也可以读取一个字节片。我想知道是否最好有一个实现读写器的函数interface?@matio2matio,Go中的各种编码器往往有一个有助于其典型使用方式的api。大多数情况下使用
[]字节
进行编码/解码。浏览编码包,如encoding/binary end encoding/base64。