Java 从地图创建tar并将其转换为bytearray而不保存
我有一个映射,文件名为Java 从地图创建tar并将其转换为bytearray而不保存,java,Java,我有一个映射,文件名为字符串格式的键,内容为字节数组格式的值(字节[]) 我想将地图中的所有条目压缩到一个tar文件中,并将tar文件转换为bytearray,而不将任何内容保存到磁盘 现在,我正在temp目录中创建tar文件,并再次以byteArray的形式读取tar文件 但是有没有其他方法可以在内存中创建tar文件并将其转换为bytearray 我正在使用appache公共资源库。这就是我到目前为止试过的 TarArchiveOutputStream outTar = new TarArch
字符串格式的键
,内容为字节数组格式的值
(字节[])
我想将地图中的所有条目压缩到一个tar文件中,并将tar文件转换为bytearray
,而不将任何内容保存到磁盘
现在,我正在temp目录中创建tar文件,并再次以byteArray的形式读取tar文件
但是有没有其他方法可以在内存中创建tar文件并将其转换为bytearray
我正在使用appache公共资源库。这就是我到目前为止试过的
TarArchiveOutputStream outTar = new TarArchiveOutputStream(byteArrayOutputStream);
for (Map.Entry<String, byte[]> entry : fileMap.entrySet()){
TarArchiveEntry tarArchiveEntry = new TarArchiveEntry(entry.getKey());
tarArchiveEntry.setSize(entry.getValue().length);
try {
outTar.putArchiveEntry(tarArchiveEntry);
outTar.write(entry.getValue());
} catch (IOException e) {
e.printStackTrace();
}
}
try {
outTar.close();
outTar.closeArchiveEntry();
} catch (IOException e) {
e.printStackTrace();
}
return byteArrayOutputStream.toByteArray();
TarArchiveOutputStream outTar=新的TarArchiveOutputStream(byteArrayOutputStream);
对于(Map.Entry:fileMap.entrySet()){
TarArchiveEntry TarArchiveEntry=新的TarArchiveEntry(entry.getKey());
tarArchiveEntry.setSize(entry.getValue().length);
试一试{
outTar.putArchiveEntry(塔拉奇文垂);
write(entry.getValue());
}捕获(IOE异常){
e、 printStackTrace();
}
}
试一试{
outTar.close();
outTar.closeArchiveEntry();
}捕获(IOE异常){
e、 printStackTrace();
}
返回byteArrayOutputStream.toByteArray();
closeArchiveEntry必须进入for循环,您必须在开始下一项之前关闭每个条目:
for (Map.Entry<String, byte[]> entry : fileMap.entrySet()){
TarArchiveEntry tarArchiveEntry = new TarArchiveEntry(entry.getKey());
tarArchiveEntry.setSize(entry.getValue().length);
try {
outTar.putArchiveEntry(tarArchiveEntry);
outTar.write(entry.getValue());
outTar.closeArchiveEntry(); //////// <-----------
} catch (IOException e) {
e.printStackTrace();
}
}
try {
outTar.close();
} catch (IOException e) {
e.printStackTrace();
}
for(Map.Entry:fileMap.entrySet()){
TarArchiveEntry TarArchiveEntry=新的TarArchiveEntry(entry.getKey());
tarArchiveEntry.setSize(entry.getValue().length);
试一试{
outTar.putArchiveEntry(塔拉奇文垂);
write(entry.getValue());
outTar.closeArchiveEntry();//到目前为止你尝试了什么?我已经提到我正在创建一个tar,保存到磁盘并以bytearray的形式读取。这就是为什么你否决了我的问题?我只需要在内存中使用一种方法。我正在阅读appache commons compress的文档。你告诉我们你没有显示。该代码看起来不错,但我使用了closeArchiveEntry可能必须进入for循环。或者这段代码还有什么不起作用?@kutschkem这就是问题所在……非常感谢。