base64 encode audio-Datei, und senden Sie als String wieder entschlüsseln Sie die Zeichenfolge
Habe ich fest auf das Problem, für ein paar Stunden versucht es zum laufen zu bringen. Im Grunde, was ich versuche zu tun, ist die folgende. Base64 encodieren einer audio-Datei abgeholt von einer SD-Karte auf ein Android-Gerät, Base64-Kodieren Sie, wandeln Sie es in einen String und dann decodiert den String mit Base64 wieder und speichern Sie die Datei auf sdcard. Es klingt alles ziemlich einfach und funktioniert großartig, wenn Sie Sie mit einem text-Datei. Zum Beispiel, wenn ich erstellen Sie eine einfache text-Datei, nennen Sie es, dave.text und injizieren Sie einige text in "Hello Dave" oder etwas ähnliches, es funktioniert großartig, aber nicht, wenn ich versuche, das gleiche zu tun mit einer Binär-Datei, audio-in diesem Beispiel. Hier ist der code, den ich verwende.
File file = new File(Environment.getExternalStorageDirectory() + "/hello-4.wav");
byte[] FileBytes = FileUtils.readFileToByteArray(file);
byte[] encodedBytes = Base64.encode(FileBytes, 0);
String encodedString = new String(encodedBytes);
Utilities.log("~~~~~~~~ Encoded: ", new String(encodedString));
byte[] decodedBytes = Base64.decode(encodedString, 0);
String decodedString = new String(decodedBytes);
Utilities.log("~~~~~~~~ Decoded: ", new String(decodedString));
try {
File file2 = new File(Environment.getExternalStorageDirectory() + "/hello-5.wav");
FileOutputStream os = new FileOutputStream(file2, true);
os.write(decodedString.getBytes());
os.flush();
os.close();
} catch (Exception e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
An diesem Punkt, wenn ich versuche die Datei zu speichern, wird es beschädigt. Die audio-Datei-Hallo-5.wav ist in der Größe größer dann das original und es nicht zu spielen.
Irgendwelche Ideen, was mache ich hier falsch? Wenn ich versuche zu speichern decodedBytes mit os.schreiben(decodedBytes) es funktioniert aber nicht, wenn er in einen String konvertiert und getBytes() verwendet wird.
Irgendwelche Ideen? Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist stark mischen
String
s undbyte[]
s. Tun Sie das nicht. Wenn Sie möchten, zu verschlüsselnbyte[]
zu einemString
verwendenBase64.encodeToString()
, statt der Codierung in Byte und dann erstellen einer Zeichenfolge.Aufrufen
new String(byte[])
nicht tun, was Sie denken, es tut.Ebenfalls
Base64.decode(String, int)
zum decodieren der Zeichenfolge.Sowas (nicht getestet):
Aber warum sind Sie base64-Codierung eine audio-Datei in den ersten Platz?
FileOutputStream(file2, true);
Gemäß der Dokumentation zu diesem schreiben würde, beginnend am Ende der Datei, ich denke, das wäre kein Problem, wenn die Ausgabe-Datei noch nicht existiert, oder nicht? Ich denke, in den op ' s original-Beitrag, dass könnte sein, warum er immer eine größere Datei zumindestDecodieren von base64-Strings-Datei zu .m4a-Datei-format