2014-03-04 92 views
0

问题声音哑,但它像转换二进制字符串包含“0101010101001”,例如实际二进制文件

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

编辑,以避免混淆

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

我被卡在写下字符串(只是“0”和“1”)到一个实际的二进制数据文件的步骤......它应该比存储下来的文本文件要小得多包含“0”和“1”,正如我所假设的

回答

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(); 
0

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

+0

听起来不错,但如何处理二进制字符串太长? –

0

如果您以二进制格式存储,则为2个符号。

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

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

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

Zip是相当快;-)更新后

的downvote(不拍的使者 - 或者至少说明你downvote ...帮助我们来帮助你)

,或者你可以使用这样的

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

BigDecimal bigDec = new BigDecimal(bigInt); 
+0

嗯,我不是一个投票,但你可以再看看我的更新的问题... 将它转换为bigInt将是一个ncie的想法,非常非常小的二进制块,但如何几个a4。 ..弦? –

+1

a4字符串?好吧,如果你有一个大的字符串,我想你可以分割它并保存几个bigint。 – Leo

相关问题