繁体   English   中英

InputStream 到 GZIPInputStream,我需要知道 GZIPInputStream 的大小

[英]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.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM