Module  java.base
软件包  java.util.zip

Class Inflater



  • public class Inflater
    extends Object
    此类提供对使用流行的ZLIB压缩库的通用解压缩的支持。 ZLIB压缩库最初是作为PNG图形标准的一部分开发的,不受专利保护。 详细描述在java.util.zip package description的规格。

    以下代码片段使用DeflaterInflater演示了对字符串的简单压缩和解压缩。

     try {
         // Encode a String into bytes
         String inputString = "blahblahblah??";
         byte[] input = inputString.getBytes("UTF-8");
    
         // Compress the bytes
         byte[] output = new byte[100];
         Deflater compresser = new Deflater();
         compresser.setInput(input);
         compresser.finish();
         int compressedDataLength = compresser.deflate(output);
    
         // Decompress the bytes
         Inflater decompresser = new Inflater();
         decompresser.setInput(output, 0, compressedDataLength);
         byte[] result = new byte[100];
         int resultLength = decompresser.inflate(result);
         decompresser.end();
    
         // Decode the bytes into a String
         String outputString = new String(result, 0, resultLength, "UTF-8");
     } catch(java.io.UnsupportedEncodingException ex) {
         // handle
     } catch (java.util.zip.DataFormatException ex) {
         // handle
     }
     
    从以下版本开始:
    1.1
    另请参见:
    Deflater
    • 构造方法摘要

      构造方法  
      Constructor 描述
      Inflater​()
      创建一个新的解压缩程序。
      Inflater​(boolean nowrap)
      创建一个新的解压缩程序。
    • 方法摘要

      所有方法  接口方法  具体的方法  弃用的方法 
      Modifier and Type 方法 描述
      void end​()
      关闭解压缩程序并丢弃任何未处理的输入。
      protected void finalize​()
      已过时。
      finalize方法已被弃用。 为了执行清理,覆盖finalize子类应被修改为使用替代的清理机制,并删除覆盖的finalize方法。 当覆盖finalize方法时,其实现必须明确确保按照super.finalize()中所述调用super.finalize() 有关迁移选项的更多信息,请参阅Object.finalize()的规范。
      boolean finished​()
      如果达到压缩数据流的结尾,则返回true。
      int getAdler​()
      返回未压缩数据的ADLER-32值。
      long getBytesRead​()
      返回到目前为止输入的压缩字节的总数。
      long getBytesWritten​()
      返回到目前为止输出的未压缩字节的总数。
      int getRemaining​()
      返回输入缓冲区中剩余的总字节数。
      int getTotalIn​()
      返回到目前为止输入的压缩字节的总数。
      int getTotalOut​()
      返回到目前为止输出的未压缩字节的总数。
      int inflate​(byte[] b)
      将字节解压缩到指定的缓冲区。
      int inflate​(byte[] b, int off, int len)
      将字节解压缩到指定的缓冲区。
      boolean needsDictionary​()
      如果需要预设字典进行解压缩,则返回true。
      boolean needsInput​()
      如果输入缓冲区中没有数据,则返回true。
      void reset​()
      重新设置充气器,以便可以处理一组新的输入数据。
      void setDictionary​(byte[] b)
      将预设字典设置为给定的字节数组。
      void setDictionary​(byte[] b, int off, int len)
      将预设字典设置为给定的字节数组。
      void setInput​(byte[] b)
      设置解压缩的输入数据。
      void setInput​(byte[] b, int off, int len)
      设置解压缩的输入数据。
    • 构造方法详细信息

      • Inflater

        public Inflater​(boolean nowrap)
        创建一个新的解压缩程序。 如果参数“nowrap”为真,则不会使用ZLIB头和校验和字段。 这提供了与GZIP和PKZIP两者使用的压缩格式的兼容性。

        注意:当使用'nowrap'选项时,还需要提供一个额外的“dummy”字节作为输入。 为了支持某些优化,这是ZLIB本机库所必需的。

        参数
        nowrap - 如果为true,则支持GZIP兼容压缩
      • Inflater

        public Inflater​()
        创建一个新的解压缩程序。
    • 方法详细信息

      • setInput

        public void setInput​(byte[] b,
                             int off,
                             int len)
        设置解压缩的输入数据。 每当needInput()返回true时都应调用,表示需要输入更多的数据。
        参数
        b - 输入数据字节
        off - 输入数据的起始偏移量
        len - 输入数据的长度
        另请参见:
        needsInput()
      • setInput

        public void setInput​(byte[] b)
        设置解压缩的输入数据。 每当needInput()返回true时都应调用,表示需要输入更多的数据。
        参数
        b - 输入数据字节
        另请参见:
        needsInput()
      • setDictionary

        public void setDictionary​(byte[] b,
                                  int off,
                                  int len)
        将预设字典设置为给定的字节数组。 当inflate()返回0并且needsDictionary()返回true时,应该调用,表示需要预设的字典。 方法getAdler()可用于获取所需字典的Adler-32值。
        参数
        b - 字典数据字节
        off - 数据的起始偏移量
        len - 数据的长度
        另请参见:
        needsDictionary()getAdler()
      • setDictionary

        public void setDictionary​(byte[] b)
        将预设字典设置为给定的字节数组。 当inflate()返回0并且needsDictionary()返回true时,应该调用,表示需要预设的字典。 方法getAdler()可用于获取所需字典的Adler-32值。
        参数
        b - 字典数据字节
        另请参见:
        needsDictionary()getAdler()
      • getRemaining

        public int getRemaining​()
        返回输入缓冲区中剩余的总字节数。 这可以用于查找在解压缩完成后仍然保留在输入缓冲区中的字节。
        结果
        输入缓冲区中剩余的总字节数
      • needsInput

        public boolean needsInput​()
        如果输入缓冲区中没有数据,则返回true。 这可以用来确定是否应该调用#setInput以便提供更多的输入。
        结果
        如果输入缓冲区中没有数据,则为true
      • needsDictionary

        public boolean needsDictionary​()
        如果需要预设字典进行解压缩,则返回true。
        结果
        如果需要预设字典进行解压缩,则为true
        另请参见:
        setDictionary(byte[], int, int)
      • finished

        public boolean finished​()
        如果达到压缩数据流的结尾,则返回true。
        结果
        如果已经达到压缩数据流的结束,则为true
      • inflate

        public int inflate​(byte[] b,
                           int off,
                           int len)
                    throws DataFormatException
        将字节解压缩到指定的缓冲区。 返回实际的未压缩字节数。 返回值为0表示需要调用needsInput()或needsDictionary(),以确定是否需要更多输入数据或预设字典。 在后一种情况下,getAdler()可用于获取所需字典的Adler-32值。
        参数
        b - 未压缩数据的缓冲区
        off - 数据的起始偏移量
        len - 未压缩字节的最大数量
        结果
        实际的未压缩字节数
        异常
        DataFormatException - 如果压缩数据格式无效
        另请参见:
        needsInput()needsDictionary()
      • inflate

        public int inflate​(byte[] b)
                    throws DataFormatException
        将字节解压缩到指定的缓冲区。 返回实际的未压缩字节数。 返回值为0表示需要调用needsInput()或needsDictionary(),以确定是否需要更多输入数据或预设字典。 在后一种情况下,getAdler()可用于获取所需字典的Adler-32值。
        参数
        b - 未压缩数据的缓冲区
        结果
        实际的未压缩字节数
        异常
        DataFormatException - 如果压缩数据格式无效
        另请参见:
        needsInput()needsDictionary()
      • getAdler

        public int getAdler​()
        返回未压缩数据的ADLER-32值。
        结果
        未压缩数据的ADLER-32值
      • getTotalIn

        public int getTotalIn​()
        返回到目前为止输入的压缩字节的总数。

        由于字节数可能大于Integer.MAX_VALUE,因此getBytesRead()方法现在是获取此信息的首选方法。

        结果
        到目前为止输入的压缩字节总数
      • getBytesRead

        public long getBytesRead​()
        返回到目前为止输入的压缩字节的总数。
        结果
        到目前为止输入的压缩字节数(非负数)
        从以下版本开始:
        1.5
      • getTotalOut

        public int getTotalOut​()
        返回到目前为止输出的未压缩字节的总数。

        由于字节数可能大于Integer.MAX_VALUE,因此getBytesWritten()方法现在是获取此信息的首选方法。

        结果
        到目前为止,未压缩字节输出的总数
      • getBytesWritten

        public long getBytesWritten​()
        返回到目前为止输出的未压缩字节的总数。
        结果
        迄今为止输出的未压缩字节数(非负数)
        从以下版本开始:
        1.5
      • reset

        public void reset​()
        重新设置充气器,以便可以处理一组新的输入数据。
      • end

        public void end​()
        关闭解压缩程序并丢弃任何未处理的输入。 当解压缩程序不再被使用时,应该调用此方法,也可以通过finalize()方法自动调用该方法。 一旦调用此方法,Inflater对象的行为是未定义的。
      • finalize

        @Deprecated(since="9")
        protected void finalize​()
        已过时。 finalize方法已被弃用。 为了执行清理而覆盖finalize子类应该修改为使用替代的清理机制,并删除覆盖的finalize方法。 当覆盖finalize方法时,其实现必须明确确保按照super.finalize()中的描述调用super.finalize() 有关迁移选项的更多信息,请参阅Object.finalize()的规范。
        收集垃圾时关闭解压缩程序。
        重写:
        finalizeObject
        另请参见:
        WeakReferencePhantomReference