我有一个巨大的字符串需要缓存在某个地方,因为我无法写入文件,所以我唯一的选择是将其作为文本存储在数据库中,更具体地说,在我拥有的 clob 中我正在存储一个 JSON 文件我将压缩字符串放在该 JSON 对象的某个键下。
我正在压缩字符串,但在字符串操作的某个地方发生了一些不允许我解压缩数据的事情,所以我想知道我是否应该将数据编码为 base 64,但这会丢失压缩。
我可以做些什么来确保我可以将压缩的字符串存储在数据库中以便以后可以获取它?
我无法更改数据库,所以我只能使用 CLOB 字段
这些是我的压缩函数:
public static String compress(String text) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
OutputStream out = new DeflaterOutputStream(baos);
out.write(text.getBytes("UTF-8"));
out.close();
} catch (IOException e) {
//ooops
}
return baos.toString();
}
public static String decompress(String bytes) {
InputStream in = new InflaterInputStream(new ByteArrayInputStream(bytes.getBytes()));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
byte[] buffer = new byte[8192];
int len;
while ((len = in.read(buffer)) > 0)
baos.write(buffer, 0, len);
return new String(baos.toByteArray(), "UTF-8");
} catch (IOException e) {
//ooops
}
}
最佳答案
正如您所发现的,您无法在不损坏的情况下将二进制数据存储在 CLOB 中,因此需要编码为文本。
Base 64 平均会使二进制数据的大小增加 33%。所以你会损失一些压缩,但如果你的压缩率大于 25%(这对于特定类型的文本字符串来说通常很容易),那么压缩后进行 base 64 编码可能会为你提供净存储增益。虽然大量使用 CPU......
关于java - 压缩字符串并将其作为字符串存储在数据库中以供以后解压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18450246/