[英]InputStream to GZIPInputStream, and I need to know the size of the GZIPInputStream
提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文。
我有一个MultipartFile
,我需要将 inputStream 压缩为 gzip 并发送,但我需要找到一种方法来压缩它并知道它的压缩大小
param: MultipartFile file
try(var inputStream = file.getInputStream()) {
var outputStream = new GZIPOutputStream(OutputStream.nullOutputStream());
IOUtils.copyLarge(inputStream, outputStream);
var compressedInputStream = someConvertMerthod(outputStream);
sendCompressed(compressedInputStream, compressedSize)
}
也许我可以做这样的事情Java:How do I convert InputStream to GZIPInputStream? 但我无法获得 compressedSize
我没有找到一种简单的方法来做到这一点:(
CopyLarge() 返回复制的字节数。 我会假设即使 output 被丢弃也是如此,所以你需要的只是捕获 IOUtils.copyLarge(in,out) 的返回值,你应该对 go 很好,但这确实假设返回值是字节 WRITTEN而不是读取的字节,这并没有真正记录下来。 所以它可能会起作用!
一般来说,您假设可以将 output stream 变回输入 stream,因此 nullOutputStream() 不会是一个选项。 相反,您将创建一个临时文件,将压缩数据写入其中,然后关闭它。 那时你可以简单地问文件系统 API 它有多大,那应该是铁定的。
嘿,我想我找到了解决办法:)
param: MultipartFile file
try (InputStream inputStream = file.getInputStream()) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);
inputStream.transferTo(gzipOutputStream);
InputStream compressedInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
byteArrayOutputStream.size() // is the compressed size
}
多谢你们!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.