初衷
为了简化Java操作zip实现读取和写入,同时为了自己更加熟悉zip的用法,故此写一个自定义工具类,一方面供大家使用,另一方面也是作为学习笔记记录下来。
反序列化zip文件
/**
* 反序列化zip文件
* @param path
* @return
* @throws IOException
*/
public static Map<String, byte[]> deserial(String path) throws IOException {
ZipEntry nextEntry;
Map<String, byte[]> map = new LinkedHashMap<>();
try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(path))) {
while ((nextEntry = zipInputStream.getNextEntry()) != null) {
String fileName = nextEntry.getName();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = zipInputStream.read(buffer)) > 0) {
baos.write(buffer, 0, length);
}
map.put(fileName, baos.toByteArray());
zipInputStream.closeEntry();
}
return map;
}
}
序列化zip文件
/**
* 序列化zip文件
* @param path
* @param data
* @throws IOException
*/
public static void serial(String path, Map<String, byte[]> data) throws IOException {
try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(path))) {
for (Map.Entry<String, byte[]> entry : data.entrySet()) {
zipOutputStream.putNextEntry(new ZipEntry(entry.getKey()));
zipOutputStream.write(entry.getValue());
zipOutputStream.closeEntry();
}
}
}
奇怪的是,对于我另外一篇博客ZipOutputStream中报错System Closed中的关于流自动关闭的问题,这里没有遇到,也不知道什么原因,希望知道的大佬提点一二
追述,关于System Closed的问题,是在使用jackson实现序列化时才会出现的