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

问题描述 投票:0回答:3

这个问题听起来很愚蠢,但就是这样

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

已编辑以避免混淆

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

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

java binary converters
3个回答
0
投票

在不讨论实现的情况下,一个简单的编码方案是存储二进制字符串的十进制值。这样,您的计算机将简单地将二进制字符串存储为适当大小的数字(int/short/long/etc)中的位。不过,不知道这是否会有最优雅的读/写过程。


0
投票

我做了更多的谷歌搜索,下面是我的案例的解决方案...我已经把解决方案放在那里,以防有人有与我相同的问题:)

读取后将二进制字符串表示形式转换为 C# 中的字节数组。我决定实现它的 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();

0
投票

如果以二进制存储,则有 2 个符号。

如果以十六进制存储,则有 16 个符号。

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

如果存储对您来说很重要,大多数人会做的是以二进制格式存储数据,然后对其进行压缩(使用 DataOutputStreamZipOutputStream)。

压缩速度相当快;-)

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

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

BigDecimal bigDec = new BigDecimal(bigInt);
© www.soinside.com 2019 - 2024. All rights reserved.