大文件到base64字符串数组

时间:2015-12-07 22:26:01

标签: java android string base64 bytearray

我的函数返回一个超出其限制的字符串,因为我使用的文件很大。

有没有办法创建一个返回字符串数组的函数,以便稍后我可以级联它们并重新创建文件?

private String ConvertVideoToBase64()
{
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    FileInputStream fis;

    try {
        File inputFile = new File("/storage/emulated/0/Videos/out.mp4");

        fis = new FileInputStream(inputFile);

        byte[] buf = new byte[1024];
        int n;
        while (-1 != (n = fis.read(buf)))
            baos.write(buf, 0, n);
        byte[] videoBytes = baos.toByteArray();

        fis.close();

        return Base64.encodeToString(videoBytes, Base64.DEFAULT);
        //imageString = videoString;
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:2)

整部电影可能不会同时适应RAM,这就是你试图用你的baos对象做的事情。

尝试重写代码,以便对每个1024字节的块进行编码,然后通过网络/其他方式写入文件/发送。

编辑:我认为你需要使用流媒体方法。这在您无法同时将所有数据保存在内存中的平台上很常见。

基本算法将是:

Open your file. This is an input stream.
Connect to your server. This is your output stream

While the file has data
 Read some amount of bytes, say 1024, from the file into a buffer.
 encode these bytes into a Base64 string
 write the string to the server

Close server connection
Close file

您有输入流方面。我假设你有一些你要发布的网络服务。请查看http://developer.android.com/training/basics/network-ops/connecting.html以开始输出流。