byte[]转换成压缩流

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
    }
}

 

下边这个方法可以吧源流压缩车

/**通用压缩
 * 拿到之后自己进行转换 gzip 的流byte[]
 * @param str
 *  @param encoding
 * @return
 * @throws IOException
 */
public  byte[] uncompress(String str, String encoding) throws IOException {

   if (str == null || str.length() == 0) {
      return null;
   }
   ByteArrayOutputStream out = new ByteArrayOutputStream();
      GZIPOutputStream gzip;
      gzip = new GZIPOutputStream(out);
      gzip.write(str.getBytes(encoding));//这个方法可以接受byte[]
      gzip.close();
   return out.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、付费专栏及课程。

余额充值