微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

base64编码音频文件并作为字符串发送,然后解码该字符串

如何解决base64编码音频文件并作为字符串发送,然后解码该字符串

您正在大量混合Strings和byte[]s。不要那样做 如果要将a编码byte[]String,请使用Base64.encodeToString(),而不是将其编码为字节,然后 创建一个字符串。

如果我尝试使用os.write(decodedBytes)保存decodedBytes,则可以正常工作,但在转换为String并使用getBytes()时不起作用。

呼叫new String(byte[])并没有执行您认为的操作。

同样用于Base64.decode(String, int)解码字符串。

像这样的东西

File file = new File(Environment.getExternalStorageDirectory() + "/hello-4.wav");
byte[] bytes = FileUtils.readFiletoByteArray(file);

String encoded = Base64.encodetoString(bytes, 0);                                       
Utilities.log("~~~~~~~~ Encoded: ", encoded);

byte[] decoded = Base64.decode(encoded, 0);
Utilities.log("~~~~~~~~ Decoded: ", Arrays.toString(decoded));

try
{
    File file2 = new File(Environment.getExternalStorageDirectory() + "/hello-5.wav");
    FileOutputStream os = new FileOutputStream(file2, true);
    os.write(decoded);
    os.close();
}
catch (Exception e)
{
    e.printstacktrace();
}

但是,为什么首先要对音频文件进行base64编码?

解决方法

我已经在这个问题上停留了几个小时,试图使其正常工作。基本上我想做的是以下内容。Base64对从Android设备上的sdcard拾取的音频文件进行编码,对Base64进行编码,将其转换为String,然后再次使用Base64对该String进行解码,然后将文件保存回sdcard。听起来很简单,使用文本文件时效果很好。例如,如果我创建一个简单的文本文件,将其命名为dave.text并在“
Hello Dave”之类的内容中注入一些文本,则效果很好,但在尝试对二进制文件(在此示例中为音频)执行相同操作时失败。这是我正在使用的代码。

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();
}

此时,如果我尝试保存文件,则文件已损坏。音频文件hello-5.wav的大小比原始文件大,并且无法播放。

有什么想法我在这里做错了吗?如果我尝试使用os.write(decodedBytes)保存decodedBytes,则可以正常工作,但在转换为String并使用getBytes()时不起作用。

有任何想法吗?谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。