1

我是 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() 获取输出。这与输入二进制字符串不同。我希望输出与输入相同。提前致谢。

4

1 回答 1

0

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

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

于 2013-07-07T17:26:32.100 回答