我已经在这个问题上停留了几个小时,试图使其正常工作。基本上我想做的是以下内容。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()时不起作用。
有任何想法吗?谢谢!
您正在大量混合String
s和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编码?
我正在尝试将yaml文件作为base64字符串发送,以便此代码正常工作: 在上述代码应包含数据。 我有这条路线: 代码工作正常,但客户机代码希望在以下代码中名为的属性中使用base64字符串: 但是字符串处于。如何设置属性?
我有一个Java类,我用GSON把它转换成字符串。张贴这个字符串是base64编码的(由于某种原因,我们不去那里:),当我解码回来,我失去了所有的json中的{和}字符。 例如:{“name”:“ABC”}解码并编码回名称ABC 我想要回我的旧数据,即我想要回{"name:"ABC"} 像上面这样简单的事情,内容丢失了 请帮忙
我想将一个字符串编码成并通过套接字传输它,然后解码回来。 下面是我的代码,结果是“77+9x6s=” 有什么想法如何实现这一点吗?
问题内容: 我喜欢将字符串的Java映射编码为单个base 64编码的字符串。编码后的字符串将被传输到远程端点,并且可能由一个不好的人操纵。因此,应该发生的最糟糕的事情是密钥,值元组无效,但不应将任何其他安全风险置于一旁。 例: 是的,必须是Base64。不喜欢那个 或那个 或其他任何一个。是否有现有的轻量级解决方案(首选单一实用程序类)?还是我必须创建自己的? 有什么比这更好的了吗? 谢谢, 问
问题内容: ’=?KOI8-R?B?W1JFUS0wMDI1NDEtNDc5NzddIO / h7yAi89TSz8rGwdLGz9IiIDs =?= \ r \ n \ t =?KOI8-R?B?Ry43MjkgKDEwKQ ==?=’ 如何将其转换为可读的内容?谢谢 ! 问题答案: email.header.decode_header(‘=?KOI8-R?B?W1JFUS0wMDI1NDEtN
问题内容: 是否有仅使用JAVA 1.5 LIBRARIES来解码base64字符串的简便方法? 由于Windows和Mac OS X之间存在跨平台兼容性问题,我必须使用Java 1.5(仅Mac 10.5支持Java 1.6,低于10.5的所有内容均默认使用Java 1.5)。 对象“ sun.misc.Base64Decoder”在Java 6中存在,但在Java 5中不存在。 问题答案: 不