例如,将二进制字符串转换为包含“0101010101001”的实际二进制文件

时间:2014-03-04 04:53:55

标签: java binary converter

问题听起来很愚蠢,但就像那样

我有一个包含一系列“0”和“1”的二进制字符串。如果我将其存储为文本文件,它将是巨大的,因为每个字符大约需要8个字节。但实际上它应该小得多,因为“0”或“1”实际上只是1位(1字节/ 8)。我的问题是如何在Java中做到这一点?

编辑以避免混淆

我使用了一种算法将所有数据编码为“0”和“1”序列字符串。因此,1个数据块可能会变得很大...... 1个字符串的A4纸包含“0”和“1”。

我坚持将该字符串(只有“0”和“1”)写入实际的二进制数据文件的步骤......它应该比仅存储包含的文本文件要小得多我假设“0”和“1”

3 个答案:

答案 0 :(得分:0)

没有说话实现,一个简单的编码方案是存储二进制字符串的十进制值。这样,您的计算机将简单地将二进制字符串存储为具有适当大小(int / short / long / etc)的位。不过,如果那将是最优雅的读/写过程。

答案 1 :(得分:0)

如果以二进制形式存储,则它是2个符号。

如果以十六进制存储它,那么它就是16个符号。

更多符号,文本文件中的字符更少。

如果存储是重要的,大多数人会做的是将数据存储为二进制格式,然后压缩它(使用DataOutputStreamZipOutputStream)。

Zip非常快; - )

在downvote之后更新(不要射击信使 - 或至少解释你的downvote ...帮助我们帮助你)

或者你可以使用这样的东西

BigInteger bigInt = new BigInteger("100010001000100010001000100010011000011100010001000100010001000100010011000011111111111111111111111111111111111111111111111100",2);

BigDecimal bigDec = new BigDecimal(bigInt);

答案 2 :(得分:0)

我已经做了更多谷歌搜索,下面是我的案例中的解决方案......我已经解决了那里的解决方案,因为有人会遇到与我相同的问题:)

在C#中阅读convert a binary string representation to a byte array之后。我决定实现它的Java版本

int numOfBytes = binarytring.length() / 8;
byte[] bytes = new byte[numOfBytes];

//store it down as 1 byte (8bits) each
for(int i = 0; i < numOfBytes; ++i) {
    // thanks https://stackoverflow.com/questions/6658388/why-java-throws-a-numberformatexception for help me out of the exception.
    bytes[i] = (byte) (Integer.parseInt(encoded.substring(8 * i, (8 * i) + 8), 2) & 0xFF);
}

FileOutputStream fos = new FileOutputStream("outputfilename"); 
fos.write(bytes);
fos.close();