base64 encode audio file and send as a String then decode the String

前端 未结 2 1032
青春惊慌失措
青春惊慌失措 2020-12-14 22:58

I have been stuck on this issue for a few hours now trying to get it working. Basically what I am trying to do is the following. Base64 encode an audio file picked up from a

相关标签:
2条回答
  • 2020-12-14 23:34

    Decoding base64 string file to .m4a file format

    try
    {
        String audioDataString = "";
        BufferedReader jsonReader = new BufferedReader(new InputStreamReader(this.getResources().openRawResource(R.raw.audioBase64File)));
        StringBuilder jsonBuilder = new StringBuilder();
        for (String line = null; (line = jsonReader.readLine()) != null; ) {
            jsonBuilder.append(line).append("");
        }
        audioDataString = jsonBuilder.toString();
        byte[] decoded = Base64.decode(audioDataString, Base64.DEFAULT);
        try {
            File file2 = new File(Environment.getExternalStorageDirectory() + "/faakhir_testAudio.m4a");
            FileOutputStream os = new FileOutputStream(file2, true);
            os.write(decoded);
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    } catch(Exception e){
        e.printStackTrace();
    }
    
    0 讨论(0)
  • 2020-12-14 23:36

    You're heavily mixing Strings and byte[]s. Don't do that. If you want to encode a byte[] to a String, use Base64.encodeToString(), instead of encoding to bytes and then creating a string.

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

    Calling new String(byte[]) does not do what you think it does.

    Likewise use Base64.decode(String, int) to decode the string.

    Something like this (not tested):

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

    But why are you base64 encoding an audio file in the first place?

    0 讨论(0)
提交回复
热议问题