C++|I/O|基于缓冲区的位级IO流
2023-03-15 22:02:27 时间
本文参考Sedgewick著Algorithms。
本文来自于Huffman Trie的作业要求。我使用了普林斯顿版算法进行移植。对于作者定义的BinaryStdIn/Out进行了移植与改造。
由于原文使用了Java语言与作者自定义的库,在移植时进行了一些适配。
移植重点:
C++中无法自主指定位移类型
而是通过有无符号类型判断
主体思路:
8 bit的unsigned char型buffer
buffer大小n
工具函数:
fillBuffer,从流中获取一个字节
clearBuffer,清空buffer,不足以0补齐
单位操作:
readBit:
n自减
从buffer中通过位运算>>n &1取出bit
n=0时,fill buffer
writeBit:
n自增
从buffer中通过位运算<<=1 |=bit置入bit
n=8时,clear buffer
单字节操作:
readByte:
字节对齐:
返回buffer,fill buffer
否则:
将buffer的后n位,与fill buffer后buffer的前8-n组合后返回。
writeByte:
字节对齐:
调用朴素输出byte
否则:
对每一位writeBit
多字节操作
readVal:
根据sizeof,进行循环
<<=8 |=readByte()
writeVal:
根据sizeof=N,进行循环
>>8*k (k from N-1 -> 0)&oxff
仓库地址
个人作业用途,因此只移植了部分方法。此外在异常处理上仍然存在问题。
相关文章
- 关于.NET玩爬虫这些事
- 为什么 .NET的反射这么慢?
- 在ASP.NET Core中使用百度在线编辑器UEditor
- MVC路由自定义及视图找寻规则
- 构建高性能ASP.NET应用的12点建议
- 你了解AJAX吗?TA不是新编程语言而是WEB应用程序技术
- 从.net转型,聊聊最近一些面试,薪资和想法
- ASP.NET 5 开发者的五个阶段​​
- 让编程更轻松的 7 个 Visual Studio 扩展
- 对 ASP.NET 异步编程的一点理解
- 推荐 7 款好用的 Visual Studio 扩展
- 给ASP.NET MVC及WebApi添加路由优先级
- 10年.NET老程序员推荐的7个开发类工具
- 19 个必须知道的 Visual Studio 快捷键
- 迄今为止最全的.NET技术栈
- .NET中删除空白字符串的10大方法
- 详细的.Net并行编程高级教程--Parallel
- 如何用.NET生成二维码?
- .net程序员工作两年总结
- .NET中删除空白字符串的10大方法