Utknąłem w tej kwestii przez kilka godzin, próbując uruchomić. Zasadniczo to, co próbuję zrobić, jest następujące. Base64 koduje plik audio pobrany z sdcard na urządzeniu z Androidem, zakodowuje go w Base64, przekształca w String, a następnie dekoduje String za pomocą Base64 i ponownie zapisuje plik z powrotem na sdcard. To wszystko brzmi dość proste i działa świetnie, robiąc to za pomocą pliku tekstowego. Na przykład, jeśli utworzę prosty plik tekstowy, nazwij go dave.text i wpisz trochę tekstu w "Hello Dave" lub coś podobnego, działa świetnie, ale zawiedzie, gdy próbuję zrobić to samo z plikiem binarnym, audio w tym przykładzie . Oto kod, którego używam.kodowanie pliku base64 i wysyłanie jako String, a następnie dekodowanie String
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();
}
W tym momencie, jeśli spróbuję zapisać plik, zostanie uszkodzony. Plik audio hello-5.wav ma większy rozmiar niż oryginał i nie jest odtwarzany.
Jakieś pomysły, co robię źle tutaj? Jeśli spróbuję zapisać dekodowane bajty za pomocą os.write (decodedBytes), to działa, ale nie po przekonwertowaniu na ciąg i użycie getBytes().
Wszelkie pomysły? Dziękuję Ci!
Dziękuję Matt, idealne rozwiązanie. Pomoże to wielu, jestem pewien! – ddavtian
Cześć Matt, mam ten sam problem. To, co sugerujesz, jest sposobem zapisu dźwięku. bcoz trwa długo nagrywanie dźwięku. Najpierw odczytam zaszyfrowany plik, a następnie odszyfruję go i zapisuję ponownie w formacie MP4. – sandy
Zastanawiam się, dlaczego ty i op użyliście 'true' w strumieniu wyjściowym - 'FileOutputStream (file2, true);' Według dokumentacji to byłoby napisane na końcu pliku, myślę, że to nie ważne czy plik wyjściowy jeszcze nie istnieje, czy nie? Wydaje mi się, że w oryginalnym poście op jest to, że dostaje większy plik co najmniej – Wraithious