byte[]转换成压缩流

本文介绍如何将byte数组转换为压缩流,避免多次文件落地,提高效率。提供了一个简单的方法,使得接收方可以直接将压缩后的byte[]转化为ZIP压缩文件。
摘要由CSDN通过智能技术生成

1.当我们拿到一个文件之后,我们会把它压缩然后压缩,然后读取流。这样中间会有很多次落地成文件很不方便。

有一个简单的办法如下方法。别人拿到这个压缩后的byte[] 可以之间转换成zip的压缩文件。

/**
 * 源流 转换成ZIP流
 *
 * @param sourceData
 * @return byte[]
 */
public byte[] getZipByte(byte[] sourceData, String name) {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ZipOutputStream zip = new ZipOutputStream(bos);
    try {
        ZipEntry entry = new ZipEntry(name);
        entry.setSize(sourceData.length);//返回条目数据的未压缩大小;如果未知,则返回 -1。
        zip.putNextEntry(entry);// 开始写入新的 ZIP 文件条目并将流定位到条目数据的开始处
        zip.write(sourceData);//将字节数组写入当前 ZIP 条目数据。
    } catch (Exception ex) {
        logger.info("---压缩流失败---");
        logger.error(ex.getMessage());
    } finally {
        try {
            zip.closeEntry();
            zip.close();
        } catch (IOException e) {
            logger.error(e.getMessage());
        }
        return bos.toByteArray();
    }
}

 

下边这个方法可以吧源

压缩可以通过Java中的压缩类(如GZIPOutputStream)进行压缩,得到压缩后的字节。可以使用Java IO中的ByteArrayOutputStream类创建一个输出,然后将压缩中的数据写入到该输出中,最终得到压缩后的字节。 以下是一个示例代码: ```java import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.GZIPOutputStream; public class CompressionExample { public static void main(String[] args) throws Exception { // 读取需要压缩的文件 FileInputStream inputStream = new FileInputStream("example.txt"); // 创建压缩 GZIPOutputStream gzipOutputStream = new GZIPOutputStream(new ByteArrayOutputStream()); // 从输入中读取数据,并将压缩后的数据写入到压缩byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) > 0) { gzipOutputStream.write(buffer, 0, len); } // 关闭压缩 gzipOutputStream.close(); // 获取压缩后的字节 byte[] compressedBytes = ((ByteArrayOutputStream) gzipOutputStream.getOut()).toByteArray(); // 将压缩后的字节写入到文件 FileOutputStream outputStream = new FileOutputStream("example.txt.gz"); outputStream.write(compressedBytes); // 关闭输入输出 inputStream.close(); outputStream.close(); } } ``` 在这个示例中,我们首先从文件“example.txt”读取需要压缩的数据,然后创建一个GZIPOutputStream对象,将读取到的数据压缩后写入到一个ByteArrayOutputStream对象中。最后,我们将压缩后的字节写入到文件“example.txt.gz”中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值