二进制到文本,并使用JAVA将其反转为二进制

时间:2013-07-07 17:08:54

标签: java binary

我是Java新手。我已将二进制字符串更改为文本字符串使用此代码。

   StringBuilder contentBuilder = new StringBuilder();
 StringBuffer sb = new StringBuffer();
try {
    BufferedReader in = new BufferedReader(new FileReader("filename.txt"));
    String jitu;
    while ((jitu = in.readLine()) != null) {
        contentBuilder.append(jitu);
    }
    in.close();
} catch (IOException e) {
}
    String binput = contentBuilder.toString();     
     for (int i = 0; i < binput.length()/8; i++)
    {
        int a = Integer.parseInt(binput.substring(8*i,(i+1)*8),2);
       sb.append((char)(a));
    }

然后我想通过以下代码将此文本反转为二进制文件。

      byte[] bytes = binput.getBytes();
  StringBuilder binary = new StringBuilder();
  for (byte b : bytes){
     int val = b;
     for (int i = 0; i < 8; i++){
     binary.append((val & 128) == 0 ? 0 : 1);
     val <<= 1;
     }}

但问题是当我从binary.append()获取输出时。这与输入的二进制字符串不一样。我希望输出与输入相同。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果您的文件确实包含二进制文件(例如,不是字符数据),那么您阅读它的方式几乎可以保证丢失数据。您正在使用默认字符集将二进制转换为字符串。在许多系统上,默认字符集是UTF-8。许多二进制序列不映射到有效的unicode字符,在这种情况下,如果您将该数据解释为UTF-8,则默认行为是用设置的替换字符替换该数据。这意味着你将丢失大量数据。

如果你真的想要将二进制数据作为字符串读取(这可能不是一个好方法),请使用一个字符集,该字符集具有每个可能的位序列的映射(例如Windows-1252),以便您可以确保你不会丢失任何数据。