2016-04-28 5 views
0

Es ist eine sehr seltsame Frage (zumindest für mich), aber ich habe ein seltsames Verhalten der Codierung in Java gefunden. Zum Beispiel haben Sie einige Bytes. Dann interpretieren Sie diese Bytes als Zeichenfolge in einer Codierung. Dann erhalten Sie Bytes dieser Zeichenfolge und speichern sie in einer anderen Datei. Ich denke, dass Kodierung ist nur angegebene Art und Weise Bytes als String zu interpretieren. Aber auf diese Weise müssen Bytes in beiden Dateien gleich sein, aber das haben sie nicht.Bytes in verschiedenen Kodierungen

Dies ist ein Beispielcode Beispiel:

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

Es gibt zwei Codierungen 1) Ihre file.encoding Systemeigenschaft 2) String-Codierung, die auf Plattform-Codierung basiert. Außerdem schreiben Sie die Base64-codierte Zeichenfolge in eine Ausgabedatei. Wie werden die Bytes gleich sein? – randominstanceOfLivingThing

+0

Base 64 ist eine Möglichkeit zum Codieren von Bytes. Sie verwandeln ein Array von Bytes in eine Zeichendarstellung dieser Bytes. Es gibt absolut keinen Grund, dass eine Base 64 codierte Bytefolge irgendwo in der Nähe der Zeichenfolge sein sollte, die Sie codieren. Z.B. Sieh dir das [wiki] (https://en.wikipedia.org/wiki/Base64) an, das erste Beispiel zeigt genau, was du machst. – matt

Antwort

1

ist die erste Datei ein Byte enthält sagen lassen, 0x00.

Die Base-64-Codierung dieses Bytes ist String, "AA==". Wenn Sie getBytes() für diese Zeichenfolge aufrufen, erhalten Sie 0x41, 0x41, 0x3D, 0x3D — ein Byte für jedes Zeichen in der Zeichenfolge.

Dies sind die in die zweite Datei geschriebenen Bytes.

+0

Es ist genau das, was ich will, Danke. –