将字符串表示forms转换为字节
我刚刚开始学习文件压缩,我遇到了一些障碍。 我有一个应用程序,将一个字符串,如“程序”编码为压缩二进制表示"010100111111011000"
(请注意,它仍然存储为字符串)。
Encoding g 111 r 10 a 110 p 010 o 011 m 00
现在我需要使用FileOutputStream
将其写入文件系统,我遇到的问题是,如何将字符串“010100111111011000”转换为使用FileOutputStream
写入文件系统的byte[]
/ byte
s?
我之前从未使用过位/字节,所以我在这里处于死路。
位移运算符简介:
首先,我们有左移运算符x << n
。 这将把x
所有位移位n
位,用零填充新位:
1111 1111 << 3: 1111 1000
接下来,我们有了签名的右移运算符x >> n
。 这将x
所有位右移n,将符号位复制到新位:
1111 1111 >> 3: 1111 1111 1000 0000 >> 3: 1111 0000 0111 1111 >> 3: 0000 1111
最后,我们有零填充右移运算符x >>> n
。 这将x
所有位右移n
位,用零填充新位:
1111 1111 >>> 3: 0001 1111
你也可以找到有用的bitwise或运算符, x | y
x | y
。 这比较了x
和y
中每个位置的位,如果在x
或y
中打开,则设置新数字的位,否则关闭:
1010 0101 | 1010 1010 --------- 1010 1111
你应该只需要以前的操作员来解决问题,但为了完整起见,这里是最后两个:
bitwise-and运算符, x & y
将输出中的位设置为1,当且仅当x
和y
的位都打开时:
1010 0101 & 1010 1010 --------- 1010 0000
bitwise-xor运算符x ^ y
将输出位设置为1,如果该位在一个数字或另一个数字中打开,但不是两个:
1010 0101 ^ 1010 1010 --------- 0000 1111
现在,将这些应用于手头的情况:
您将需要使用位移运算符来添加和操作位。 根据字符串表示开始在右侧设置位并将其移位。 继续,直到您到达一个字节的末尾,然后移动到下一个字节。 假设我们要创建“1100 1010”的字节表示:
Our byte Target --------- -------- 0000 0000 1100 1010 0000 0001 ^ 1100 1010 0000 0011 ^ 1100 1010 0000 0110 ^ 1100 1010 0000 1100 ^ 1100 1010 0001 1001 ^ 1100 1010 0011 0010 ^ 1100 1010 0110 0101 ^ 1100 1010 1100 1010 ^
当然,我会留给你将它应用到你的工作中。
将你的String
切换为8
长度并调用Byte#parseByte 。 如果将radix
设置为2
,它将解析String
作为二进制数。
我想,你想在文件中将这些零和一些写为二进制值。 我是这样,你可以每次迭代8个符号的字符串(String.substring()或smth)并用Byte(String)构造函数创建字节。 这是我现在想到的最简单的解决方案。
如果我对这个问题不对,请详细说明。