我有以下方法将文件转换为字节数组,而不是字符串和返回。
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服务器。一旦上传即将下载,它将从缓存而不是数据库中提取。缓存用于通过预测提高搜索性能,我不希望每次有人搜索时都调用数据库。
答案 0 :(得分:3)
比Hex更有效的编码是Base64,对于大文件,开销趋向于最低约37%。不幸的是,它没有标准的库,但Apache Commons包含了一个类来执行此操作。
String temp = Base64.encodeBase64String(IOUtils.toByteArray(is));
byte[] b = Base64.decodeBase64(s);