ZipEntry从BLOB ZipArchiveInputStream返回null

时间:2018-12-21 13:21:56

标签: java xml inputstream ziparchive

主要问题是我从zipEntry获得空结果。我正在做的是从数据库中获取BLOB.zip,将其定向到输入流,再从那里输入zipArchiveInputStream和ZipEntry,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格式,需要在控制台上显示。

1 个答案:

答案 0 :(得分:0)

我通过使用GZIPInputStream解决了这个问题。似乎最后是通用xml。

try {
        GZIPInputStream gzip = new GZIPInputStream(bys);
        Reader decoder = new InputStreamReader(gzip, "UTF-8");
        BufferedReader buffered = new BufferedReader(decoder);
        System.out.println(buffered.readLine());
        String data = buffered.readLine();
        InputSource xml = new InputSource(new StringReader(data));
        System.out.println(xml);

    } catch (IOException e) {
        e.printStackTrace();
    }