c#保存二进制编码,是存储空间最小的方法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#保存二进制编码,是存储空间最小的方法?相关的知识,希望对你有一定的参考价值。
c#用BinaryWriter等只能写入一个string类型的,有什么能用较小的空间保存这个二进制串(或者用二进制保存一段数据,如一个对象数组)?(提供一个具体的函数。)
c#用BinaryWriter等只能写入一个string类型的,有什么能用较小的空间保存这个二进制串(或者用二进制保存一段数据,如一个对象数组)?楼主.你确定你明白你在做什么么..
如果你这么做不但不会加快或者所要使用内存的空间.反而会增大.
首先.STRING自己占一些..你用二进制..他还是要分空间..
这些放开不说
把STRING转化为二进制.不管怎么转.他仍旧占用了原本的空间.
甚至更多
原因也很简单.
你的二进制是一个数组.他可能需要用N个位置来存一个STRING字符..你觉得..哪个大?
尤其是中文哦~
所谓较小空间.就要关系到压缩了.
你可以尝试使用系统自带的ZIP压缩机制即可 参考技术A 二进制序列化,BinaryFormatter,不过还不是最小的,google的一个二进制序列化算法是最小的追问
序列化还是比较管用。
我现在有一串纯01二进制码串(非常长),想找出一个尽量小的存储方法。
那只能压缩
参考技术B 利用Json可以把对象转换到符串,然后把字符串转成二进制,或者直接进行7Z压缩。简单至极 参考技术C 不知道是不是最小,但是应该是程序处理最快的
字节和编码
计算机存储最小单元 bit,表示 0 或者 1
8 个 bit (00000000 ~ 11111111)共 256 种状态,构成 byte(字节)
ASCII 码共 128 个字符编码,使用 1 个字节保存,第一位为 0
Unicode 符号集,规定了每个符号的二进制代码,但没有规定其存储方式(用几个字节存储)
UTF-8 是 Unicode 的一种实现,是一种变长的实现方式,使用 1~4 字节表示一个符号
编码规则
- 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的
- 对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码
Unicode符号范围(十六进制) | UTF-8编码方式(二进制) |
0000 0000 ~ 0000 007F | 0xxxxxxx |
0000 0080 ~ 0000 07FF | 110xxxxx 10xxxxxx |
0000 0800 ~ 0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
0001 0000 ~ 0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
比如 高 这个符号,Unicode 值是 9AD8,在 0000 0800 ~ 0000 FFFF 范围内,使用 3 字节(1110xxxx 10xxxxxx 10xxxxxx)存储,9AD8 的二进制值为 1001 1010 1101 1000,从最后一位二进制值开始从后往前填补 x 值,即为:11101001 10101011 10011000,转为十六进制为:F9AB98,所以 高 的 UTF-8 值为 E9AB98
参考链接:
以上是关于c#保存二进制编码,是存储空间最小的方法?的主要内容,如果未能解决你的问题,请参考以下文章