如何从Http请求中的原始数据创建Zip文件?

时间:2019-05-21 11:34:43

标签: java zip

我试图从原始字符串创建一个Zip文件(例如,当您使用编辑器打开一个Zip文件时),我是从API获得的。 我尝试使用Java 8中的Zip-API,但收到“ java.util.zip.ZipException:长度或距离符号过多”的错误。

        ByteArrayInputStream bis = new ByteArrayInputStream(s.getBytes());
        ZipInputStream zis = new ZipInputStream(bis);

        FileOutputStream fos = new FileOutputStream("C:\\Users\\Desktop\\ArchiveTest.zip");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        ZipOutputStream zos = new ZipOutputStream(bos);

        ZipEntry currentEntry;
        byte[] buffer = new byte[8192];
        while ((currentEntry = zis.getNextEntry()) != null) {
            ZipEntry newEntry = new ZipEntry(currentEntry.getName());
            zos.putNextEntry(newEntry);
            int length;
            while ((length = zis.read(buffer)) > 0) {
                zos.write(buffer, 0, length);
            }
            zos.closeEntry();                   
        }

        zos.close();

我的猜测是Java无法处理未知字符并更改它们,但是我该如何更改其行为?

感谢您的答复!

1 个答案:

答案 0 :(得分:0)

要从String获取字节,应该(总是)指定一种编码,例如String s = "äüö"; byte[] bytes = s.getBytes("UTF-8");甚至更好的...; byte[] bytes = s.getBytes(StandardCharsets.UTF_8);

在此应使用以下内容(如果网站字符集为“ UTF-8”):

InputStream bis = new java.io.ByteArrayInputStream(s.getBytes(StandardCharsets.UTF_8));
...