1
13
缓冲单个位直到您积累了一个完整的字节似乎是一个好主意:
当要写入的位数不是8的倍数时,您只需要处理这种情况。 |
2
8
你可以用
我做了块大小的
当我在十六进制编辑器中打开dat a.dat时,我看到:
|
3
3
您使用的是哪个文件系统? 很可能它以字节为单位存储文件的长度(是否存在 任何 不是吗?)因此,不可能有一个不是整数字节的物理文件。 因此,如果您将文件作为一个位流写入,那么您要么在完成后截断最后几个位,要么用剩余位中的垃圾值写出最后一个字节。 这是一些 蟒蛇 启动代码
|
4
0
我建议分配一个相当大的缓冲区(至少4096字节),并在磁盘满时将其刷新到磁盘上。使用单字节缓冲区通常会导致性能不佳。 |
5
0
你不能真的。我很确定问题不是语言或文件系统,而是硬件问题。处理器设计用于处理字节。也许你能做的最接近的就是一遍又一遍地写上最后一个字节,用0填充右键,一次一个地改变它们。 因此,要编写位“11011”,可以执行以下操作(python示例,但是任何语言都应该有这样做的功能:
你不希望从中获得某种性能提升,是吗? |
6
0
这里的问题是许多平台没有直接的位访问。它们将比特分组成最小的包,通常是 字节 或 单词 . 此外,流设备的协议不促进单个位的传输。 处理单个位的常用方法是将它们打包到最小的可移植(可寻址)可访问单元中。未使用的位通常设置为零。这可以通过二进制算术运算(或、和、异或、非等)来实现。 使用现代处理器,位旋转会减慢机器和性能。内存便宜,寻址空间大,位封装的理由变得更加困难。通常,位打包是为面向硬件的操作(以及传输协议)而保留的。例如,如果处理器 单词 容量为16位,处理器处理16个字的速度可能比一个字处理16位字的速度快。 另外,请记住,向内存写入和从内存写入通常比从流写入I/O要快。高效的系统在传输数据之前将数据缓冲在内存中。您可能想在设计中考虑这种技术。减少I/O操作将提高程序的性能。 |
7
0
我曾经为哈夫曼解码做过一次,最后把比特写成了字符,这样就可以把内部的一切处理成一个普通的旧C字符串。
这样就不必担心尾随字节,而且它也是人类可读的。此外,检查位更容易,因为它只是寻址char数组的问题。(
明显的缺点是这种表示使用更多的内存。 |