【发布时间】:2018-04-23 12:24:42
【问题描述】:
我有一个基于文件的 H2 数据库(引擎版本 1.4.196),其中有一个 mediumblob 列,其中包含 COMPRESS() 函数返回的数据:
create table foo (compressed_data mediumblob);
...
insert into foo (compressed_data) values (COMPRESS(STRINGTOUTF8('Test'), 'DEFLATE'));
(表格由flyway创建并填充。)
我想在 JDBC 客户端中读取这些数据,而无需先调用 DECOMPRESS()。 (我想做解压客户端以兼容其他系统)。我尝试通过 InflaterInputStream 读取数据,它可以解压缩 DEFLATE 数据:
try (InputStream dbStream = rs.getBinaryStream("compressed_data");
InflaterInputStream inflaterStream = new InflaterInputStream(dbStream);
) {
inflaterStream.read();
...
但这会导致错误:
java.util.zip.ZipException: incorrect header check
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164)
...
有什么方法可以从 H2 的列中获取InflaterInputStream 兼容的压缩数据?
【问题讨论】:
-
H2 是开源的,在 Java 中:您可以随时检查 H2 在内部做了什么。