2016-04-28 31 views
0

這是一個非常奇怪的問題(至少對我來說),但我發現一些奇怪的Java編碼行爲。 例如,您有一些字節集。然後你將這些字節解釋爲某種編碼中的字符串。比你得到這個字符串的字節並將它保存到另一個文件。 我認爲編碼只是將字節解釋爲字符串的指定方式。但是這樣兩個文件中的字節必須是相同的,但是它們沒有。字節在不同的編碼

這是示例代碼實例:

FileInputStream inputStream = new FileInputStream(new File("firstFile")); 
    byte[] arr = new byte[50000]; 
    int l = inputStream.read(arr,0,50000); 
    arr = Arrays.copyOfRange(arr,0, l); 
    BASE64Encoder encoder = new BASE64Encoder(); 
    String st = encoder.encode(arr); 

    FileOutputStream outputStream = new FileOutputStream(new File("secondFile")); 
    outputStream.write(st.getBytes(), 0, st.getBytes().length); 
    inputStream.close(); 
    outputStream.close(); 
+0

有兩種編碼1)你的file.encoding系統屬性2)基於平臺編碼的字符串編碼。你也在編寫base64編碼的字符串來輸出文件字節是怎樣的。 – randominstanceOfLivingThing

+0

Base 64是一種編碼字節的方法。您將一個字節數組轉換爲這些字節的字符表示形式。絕對沒有理由認爲64位編碼字節的字符串應該位於您正在編碼的字符串附近。例如。看一看[wiki](https://en.wikipedia.org/wiki/Base64)第一個例子顯示了你正在做的事情。 – matt

回答

1

比方說,第一個文件包含一個字節,0×00。

該字節的Base-64編碼將是String,"AA=="

當您在該字符串上調用getBytes()時,將爲字符串中的每個字符獲取0x41,0x41,0x3D,0x3D —一個字節。

這些是寫入第二個文件的字節。

+0

這正是我想要的,謝謝。 –

相關問題