2013-07-07 38 views
1

我是新的Java.I已將二進制字符串更改爲文本字符串使用此代碼。二進制文本,只是將其反轉爲使用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

在你嘗試做到這一點之前,你應該看看http://stackoverflow.com/questions/1536054/how-to-convert-byte-array-to-string-and-vice-versa –

+0

我建議你使用StringBuilder而不是StringBuffer。後者在十多年前成爲一個傳統階級。 –

回答

0

如果您的文件確實包含二進制文件(如in,not character data),那麼您讀取它的方式幾乎可以保證丟失數據。您正在使用默認字符集將二進制文件轉換爲字符串。在許多系統上,默認字符集是UTF-8。許多二進制序列不映射到有效的Unicode字符,在這些情況下,如果您將該數據解釋爲UTF-8,則默認行爲是用置換字符替換該數據。這意味着你將失去大量的數據。

如果你確實想讀取二進制數據作爲一個字符串(這可能不是一個好的方法),使用一個字符集有一個映射爲每個可能的位序列(如Windows-1252),這樣你就可以確保你不會丟失任何數據。

相關問題