当前位置: 首页 > 知识库问答 >
问题:

从Map创建tar并将其转换为字节数组而无需保存

贺劲
2023-03-14

我有一个映射,它的文件名是< code>String格式的< code>key,内容是< code>bytearray (byte[])格式的< code>value。

我想将map中的所有条目压缩到一个tar文件中,并将tar文件转换成< code>bytearray,而不将任何内容保存到磁盘上。

到目前为止,我正在temp目录中创建tar文件,并再次将tar文件读取为byteArray。

但是有没有其他方法可以在内存中创建一个tar文件并将其转换为字节数组?

我正在使用应用程序共享资源Tar存档库。这就是我到目前为止尝试过的。

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();

共有1个答案

隆选
2023-03-14

CloseArchiveEntry必须进入for循环,您必须在开始下一个之前关闭每个Entry:

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();
        }
 类似资料:
  • 问题内容: 我有以下代码,我试图通过测试,但似乎无法理解Java世界中各种编码形式。 我想我的问题是:将任意字节的字节数组转换为Java字符串,然后将同一Java String转换为另一个字节数组的正确方法是什么,该字节数组将具有与原始字节相同的长度和相同的内容数组? 问题答案: 尝试特定的编码: ideone链接

  • 问题内容: 我有两个字符串数组键和值 将它们转换为地图的最快方法是什么?我知道我们可以遍历它们。但是,这里有实用程序吗? 问题答案: 比这快吗?

  • 问题内容: 我有一个接收a的函数,但是我所拥有的a是进行此转换的最佳方法是什么? 我想我可以走很长一段路,然后将其放入字符串并放入字节中,但这听起来很难看,而且我认为还有更好的方法可以做到。 问题答案: 我同意Brainstorm的方法:假设您要传递机器友好的二进制表示形式,请使用该库。OP建议可能会有一些开销。纵观源的实施,我看到它做了一些运行时的决策最大的灵活性。 对?Write()接受一个非

  • 问题内容: 从DB2表中,我有一个Blob,我正在将其转换为字节数组,以便可以使用它。我需要采取字节数组并创建它。 这就是我所拥有的: 但是它创建的是不正确的,它上面有一束黑线。 实际上,通过使用基本上相同的过程编写Web应用程序,我能够创建正确的代码。Web应用程序和有关代码的主要区别在于以下这一行: 所以我知道字节数组是一个并且可以完成,但是我的代码不会创建clean 。 关于如何使它起作用的

  • 问题内容: 将转换为的快速方法是什么? 例如 问题答案: 看看ByteBuffer类。 设置字节顺序保证了,,和。 或者,你可以手动执行以下操作: 该班是专为尽管这样的脏手任务。实际上,私有定义了以下辅助方法: