在android上通过sms发送压缩的图像文件

时间:2017-03-08 10:13:07

标签: android base64 sms gzipinputstream gzipoutputstream

我想知道是否可以将图像转换为base64字符串然后使用GZIP压缩它并通过SMS将其发送到另一个Android手机,在那里它被解压缩,解码然后显示图像用户?如果是,那么可能的解决方案是什么?

1 个答案:

答案 0 :(得分:0)

是,以下代码将从文件中读取字节,gzip字节并将它们编码为base64。它适用于小于2 GB的所有可读文件。传入Base64.encodeBytes的字节将与文件中的字节相同,因此不会丢失任何信息(与上面的代码相反,首先将数据转换为JPEG格式。)

/*
 * imagePath has changed name to path, as the file doesn't have to be an image.
 */
File file = new File(path);
long length = file.length();
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(new FileInputStream(file));
if(length > Integer.MAX_VALUE) {
    throw new IOException("File must be smaller than 2 GB.");
}
byte[] data = new byte[(int)length];
//Read bytes from file
bis.read(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bis != null)
    try { bis.close(); }
    catch(IOException e) {
     }
}
//Gzip and encode to base64
String base64Str = Base64.encodeBytes(data, Base64.GZIP);

EDIT2:这应解码base64 String并将解码后的数据写入文件:     // outputPath是目标文件的路径。

//Decode base64 String (automatically detects and decompresses gzip)
byte[] data = Base64.decode(base64str);
FileOutputStream fos = null;
try {
    fos = new FileOutputStream(outputPath);
    //Write data to file
    fos.write(data);
} catch(IOException e) {
    e.printStackTrace();
} finally {
    if(fos != null)
        try { fos.close(); }
        catch(IOException e) {}
}