【发布时间】:2021-07-03 16:58:22
【问题描述】:
我有一个 tar.gz 文件的字节数组表示。添加新的配置文件后,我想获取新的 tar.gz 文件的字节数组表示。我想完全在代码本身中执行此操作,而不向本地磁盘创建任何文件。
下面是我的java代码
InputStream fIn = new ByteArrayInputStream(inputBytes);
BufferedInputStream in = new BufferedInputStream(fIn);
GzipCompressorInputStream gzIn = new GzipCompressorInputStream(in);
TarArchiveInputStream tarInputStream = new TarArchiveInputStream(gzIn);
ByteArrayOutputStream fOut = new ByteArrayOutputStream();
BufferedOutputStream buffOut = new BufferedOutputStream(fOut);
GzipCompressorOutputStream gzOut = new GzipCompressorOutputStream(buffOut);
TarArchiveOutputStream tarOutputStream = new TarArchiveOutputStream(gzOut);
ArchiveEntry nextEntry;
while ((nextEntry = tarInputStream.getNextEntry()) != null) {
tarOutputStream.putArchiveEntry(nextEntry);
IOUtils.copy(tarInputStream, tarOutputStream);
tarOutputStream.closeArchiveEntry();
}
tarInputStream.close();
createTarArchiveEntry("config.json", configData, tarOutputStream);
tarOutputStream.finish();
// Convert tarOutputStream to byte array and return
private static void createTarArchiveEntry(String fileName, byte[] configData, TarArchiveOutputStream tOut)
throws IOException {
ByteArrayInputStream baOut1 = new ByteArrayInputStream(configData);
TarArchiveEntry tarEntry = new TarArchiveEntry(fileName);
tarEntry.setSize(configData.length);
tOut.putArchiveEntry(tarEntry);
byte[] buffer = new byte[1024];
int len;
while ((len = baOut1.read(buffer)) > 0) {
tOut.write(buffer, 0, len);
}
tOut.closeArchiveEntry();
}
如何将 tarOutputStream 转换为字节数组?
【问题讨论】:
-
你不需要,你已经有了。
ByteArrayOutputStream fOut是包含您的字节数组的输出流。使用toByteArray()方法,见stackoverflow.com/questions/23154009/…等其他问题 -
@Progman 正如你所说,我从 fOut 获得了一个字节数组。但是新配置文件的数据没有存储在该数组中。这意味着在我的本地磁盘中的某个位置将该字节数组转换为 tar.gz 文件后,该文件的内容与前一个相同,即未添加 config.json 文件。
标签: java tar apache-commons-compress