【问题标题】:convert a binary string contains "0101010101001" for instance to actual binary file例如将包含“0101010101001”的二进制字符串转换为实际的二进制文件
【发布时间】:2014-04-05 11:22:42
【问题描述】:

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

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

编辑以避免混淆

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

我被困在将字符串(只是“0”和“1”)写入实际二进制数据文件的步骤中......而且它应该比仅仅存储包含的文本文件要少得多我假设的“0”和“1”

【问题讨论】:

    标签: java binary converter


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果你以二进制形式存储,你有 2 个符号。

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

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

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

      Zip 非常快 ;-)

      在投反对票后更新(不要向信使开枪 - 或者至少解释你的投反对票...帮助我们帮助你)

      或者你可以使用类似的东西

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

      【讨论】:

      • 好吧,我不是反对者,但您能否再看一下我更新的问题...将其转换为 bigInt 将是一个非常小的二进制块的想法,但是如何大约几个a4 ...字符串?
      • a4 字符串?好吧,如果你有一个大字符串,你可以将它拆分并保存几个 bigint,我猜。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-24
        • 2011-08-11
        • 1970-01-01
        • 2016-07-16
        • 1970-01-01
        相关资源
        最近更新 更多