举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > java中字节数组 Java Zip字节数组

java中字节数组 Java Zip字节数组

2023-03-23 04:18 Java教程

java中字节数组 Java Zip字节数组

java中字节数组

字节数组是Java中的一种基本数据类型,它可以用来存储任意长度的二进制数据。它是一个可变长度的数组,其中每个元素都是一个字节(8位)。字节数组可以用来存储文本、图像、音频、视频或者任何其他形式的二进制数据。

Java中的字节数组可以使用byte[]来声明,也可以使用ByteBuffer来声明。ByteBuffer是一个特殊的容器,它可以将原始字节流包装成一个对象,并允许在不同平台上进行读写操作。

byte[] bytes = new byte[10];  // 声明一个大小为10的字节数组
ByteBuffer buffer = ByteBuffer.allocate(10);  // 声明一个大小为10的ByteBuffer对象

Java Zip字节数组

Java IO教程 - Java Zip字节数组

校验和

Java在java.util.zip包中提供了一个Adler32类来计算数据字节的Adler-32校验和。

我们需要调用这个类的update()方法将字节传递给它。

在同一个包中还有另一个名为CRC32的类,它允许您使用CRC32算法计算校验和。

以下代码说明如何使用Adler32和CRC32类来计算校验和。

import java.util.zip.Adler32;
import java.util.zip.CRC32;

public class Main {
  public static void main(String[] args) throws Exception {
    String str = "HELLO";
    byte[] data = str.getBytes("UTF-8");
    System.out.println("Adler32 and  CRC32  checksums  for " + str);

    // Compute Adler32 checksum
    Adler32 ad = new Adler32();
    ad.update(data);
    long adler32Checksum = ad.getValue();
    System.out.println("Adler32: " + adler32Checksum);

    // Compute CRC32 checksum
    CRC32 crc = new CRC32();
    crc.update(data);
    long crc32Checksum = crc.getValue();
    System.out.println("CRC32: " + crc32Checksum);
  }
}

上面的代码生成以下结果。


压缩字节数组

我们可以使用java.util.zip包中的Deflater和Inflater类来分别压缩和解压缩字节数组中的数据。

我们可以使用Deflater类中的一个常量来指定压缩级别。

这些常数是BEST_COMPRESSION,BEST_ SPEED,DEFAULT_COMPRESSION和NO_COMPRESSION。

最佳速度意味着较低的压缩比,最好的压缩意味着较慢的压缩速度。

Deflater  compressor = new Deflater(Deflater.BEST_COMPRESSION);

默认情况下,压缩数据使用Deflater对象将以ZLIB格式。

要以GZIP或PKZIP格式压缩数据,请通过在构造函数中使用布尔标志为true来指定。

// Uses  the   best speed  compression and  GZIP format
Deflater  compressor = new Deflater(Deflater.BEST_SPEED, true);

以下代码显示如何使用Deflater和Inflater类压缩和解压缩字节数组

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.DataFormatException;
import java.util.zip.Deflater;
import java.util.zip.Inflater;

public class Main {
  public static void main(String[] args) throws Exception {
    String input = "Hello world!";
    byte[] uncompressedData = input.getBytes("UTF-8");

    byte[] compressedData = compress(uncompressedData,
        Deflater.BEST_COMPRESSION, false);

    byte[] decompressedData = decompress(compressedData, false);

    String output = new String(decompressedData, "UTF-8");

    System.out.println("Uncompressed data length: " + uncompressedData.length);
    System.out.println("Compressed data length:  " + compressedData.length);
    System.out.println("Decompressed data length:  " + decompressedData.length);
  }

  public static byte[] compress(byte[] input, int compressionLevel,
      boolean GZIPFormat) throws IOException {
    Deflater compressor = new Deflater(compressionLevel, GZIPFormat);

    compressor.setInput(input);

    compressor.finish();

    ByteArrayOutputStream bao = new ByteArrayOutputStream();
    byte[] readBuffer = new byte[1024];
    int readCount = 0;

    while (!compressor.finished()) {
      readCount = compressor.deflate(readBuffer);
      if (readCount > 0) {
        bao.write(readBuffer, 0, readCount);
      }
    }

    compressor.end();
    return bao.toByteArray();
  }

  public static byte[] decompress(byte[] input, boolean GZIPFormat)
      throws IOException, DataFormatException {
    Inflater decompressor = new Inflater(GZIPFormat);
    decompressor.setInput(input);
    ByteArrayOutputStream bao = new ByteArrayOutputStream();
    byte[] readBuffer = new byte[1024];
    int readCount = 0;

    while (!decompressor.finished()) {
      readCount = decompressor.inflate(readBuffer);
      if (readCount > 0) {
        bao.write(readBuffer, 0, readCount);
      }
    }
    decompressor.end();
    return bao.toByteArray();
  }
}

上面的代码生成以下结果。



阅读全文
以上是编程学为你收集整理的java中字节数组 Java Zip字节数组全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部