我有一个映射,它的文件名是< 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();
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类。 设置字节顺序保证了,,和。 或者,你可以手动执行以下操作: 该班是专为尽管这样的脏手任务。实际上,私有定义了以下辅助方法: