我是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()获取输出时。这与输入的二进制字符串不一样。我希望输出与输入相同。 提前谢谢。
答案 0 :(得分:0)
如果您的文件确实包含二进制文件(例如,不是字符数据),那么您阅读它的方式几乎可以保证丢失数据。您正在使用默认字符集将二进制转换为字符串。在许多系统上,默认字符集是UTF-8。许多二进制序列不映射到有效的unicode字符,在这种情况下,如果您将该数据解释为UTF-8,则默认行为是用设置的替换字符替换该数据。这意味着你将丢失大量数据。
如果你真的想要将二进制数据作为字符串读取(这可能不是一个好方法),请使用一个字符集,该字符集具有每个可能的位序列的映射(例如Windows-1252),以便您可以确保你不会丢失任何数据。