将文件转换为字节数组到字符串和返回的更有效方法

时间:2011-10-19 15:03:13

标签: java string file bytearray

我有以下方法将文件转换为字节数组,而不是字符串和返回。

        InputStream is = new FileInputStream(new File("c:/original.png"));
        String temp = Hex.encodeHexString(IOUtils.toByteArray(is));
        System.out.println(temp);
        byte[] b = Hex.decodeHex(temp .toCharArray());
        OutputStream out = new FileOutputStream(new File("c:/copy.png"));
        IOUtils.write(b, out);

一切正常。问题是temp字符串的大小。如果c:/original.png文件为1523KB,则temp大小为3046KB。有没有更有效的方法将文件转换为不会使文件大小加倍的字符串? (顺便说一句,我明白为什么它的大小是它的两倍)

或者,我将如何压缩temp字符串?

就字符串的原因而言。它存储在只接受字符串的缓存中。该文件实际上传到Web服务器。一旦上传即将下载,它将从缓存而不是数据库中提取。缓存用于通过预测提高搜索性能,我不希望每次有人搜索时都调用数据库。

1 个答案:

答案 0 :(得分:3)

比Hex更有效的编码是Base64,对于大文件,开销趋向于最低约37%。不幸的是,它没有标准的库,但Apache Commons包含了一个类来执行此操作。

        String temp = Base64.encodeBase64String(IOUtils.toByteArray(is));            
        byte[] b = Base64.decodeBase64(s);