【发布时间】:2019-05-21 23:15:55
【问题描述】:
主要问题是我的 zipEntry 结果为空。我正在做的是从数据库中获取 BLOB.zip,将其定向到输入流,从那里到 zipArchiveInputStream 和每次返回 null 的 ZipEntry。在使用具有相同 null 结果的 ZipInputStream 之后,我决定使用 ZipArchiveInputStream。
public byte[] getXMLStream() {
try {
return this.jdbcTemplate.queryForObject("SELECT SAVEDATA FROM JDBEVPP1.TEVP005 WHERE GFNR = 357420", byte[].class); }
catch(DataAccessException ex) {
ex.printStackTrace();
return null;}}
@Override
public void getXMLdata() {
byte[] str = getXMLStream();
InputStream myInputStream = new ByteArrayInputStream(str);
ZipArchiveInputStream fis = new ZipArchiveInputStream(myInputStream);
ZipEntry entry = null;
try {
while ( (entry = fis.getNextZipEntry()) != null ) {
System.out.println(entry.getName());
}
} catch (IOException e) {
e.printStackTrace();
}
}
我只需要获取这个 xml 并在控制台中打印它以进行测试。知道这里出了什么问题或如何使其工作吗?
编辑:内部 BLOB 是我需要在控制台上显示的 XML 格式。
【问题讨论】:
-
将 BLOB 流保存到文件中,然后使用编辑器检查魔术文件头以确保它确实是 ZIP 文件。还可以使用 7zip 之类的 zip 工具来检查 BLOB 是否是有效的压缩存档。
-
似乎唯一的错误在于 xml 的类型。我用过 GZIPInputStream 并且它有效。
-
GZIP 和 ZIP 是两种完全不同的格式...
-
我之前并不知道。这是非常美好的一天,我今天学到了很多东西。 :)
标签: java xml inputstream ziparchive