场景
需要将某音频文件mp3格式编码成字符串并能再将其转换为字符串。
注:
博客:
/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
首先新建一个工具类File2StringUtils并在工具类中新建方法实现将文件编码为字符串
public static String fileToBase64(InputStream inputStream) {String base64 = null;try {byte[] bytes = new byte[inputStream.available()];int length = inputStream.read(bytes);base64 = Base64.encodeToString(bytes, 0, length, Base64.DEFAULT);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {if (inputStream != null) {inputStream.close();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return base64;}
然后在res下新建raw目录,在此目录下存放一个mp3的音频文件。
然后在需要将文件编码为字符串的地方
InputStream is = getResources().openRawResource(R.raw.b32);msg = File2StringUtils.fileToBase64(is);
然后就可以将此mp3编码成Base64格式的字符串
然后在工具类中再新建一个解码的方法 ,通过
byte[] mp3SoundByteArray = Base64.decode(content, Base64.DEFAULT);// 将字符串转换为byte数组
剩下的就可以根据自己的需求将字节数据进行相应的操作,比如这里是将其存储到临时文件中
并进行播放
public static void playMp3(String content) {try {byte[] mp3SoundByteArray = Base64.decode(content, Base64.DEFAULT);// 将字符串转换为byte数组// create temp file that will hold byte arrayFile tempMp3 = File.createTempFile("badao", ".mp3");tempMp3.deleteOnExit();FileOutputStream fos = new FileOutputStream(tempMp3);fos.write(mp3SoundByteArray);fos.close();// Tried reusing instance of media player// but that resulted in system crashes...MediaPlayer mediaPlayer = new MediaPlayer();// Tried passing path directly, but kept getting// "Prepare failed.: status=0x1"// so using file descriptor insteadFileInputStream fis = new FileInputStream(tempMp3);mediaPlayer.setDataSource(fis.getFD());mediaPlayer.prepare();mediaPlayer.start();} catch (IOException ex) {String s = ex.toString();ex.printStackTrace();}}
然后在需要将此字符串编码解码为语音文件的地方
File2StringUtils.playMp3(dataContent);
然后就可以将上面编码的字符串文件解编码为语音文件并播放。