gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:05 28 4
gpt4 key购买 nike

我已经在这个问题上停留了几个小时,现在试图让它工作。基本上我想做的是以下内容。 Base64 编码从 Android 设备上的 sdcard 拾取的音频文件,Base64 编码它,将其转换为字符串,然后再次使用 Base64 解码字符串并将文件保存回 sdcard。这一切听起来相当简单,并且在使用文本文件时效果很好。例如,如果我创建一个简单的文本文件,将其命名为 dave.text 并在其中注入(inject)一些文本,例如“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() 时不起作用。

有什么想法吗?谢谢!

最佳答案

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

If I try to save decodedBytes using os.write(decodedBytes) it works but not when converted to a String and getBytes() is used.

调用 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 编码?

关于java - base64 编码音频文件并作为字符串发送,然后解码字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448865/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com