Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从地图创建tar并将其转换为bytearray而不保存_Java - Fatal编程技术网

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这就是问题所在……非常感谢。