模块  java.base
软件包  java.util.jar

Interface Pack200.Packer

  • Enclosing class:
    Pack200

    @Deprecated(since="11",
                forRemoval=true)
    public static interface Pack200.Packer
    Deprecated, for removal: This API element is subject to removal in a future version.
    This interface is deprecated, and is planned for removal in a future release.
    打包器引擎将各种转换应用于输入JAR文件,使得包流可以通过压缩器(例如gzip或zip)高度压缩。 可以使用Pack200.newPacker()获得发动机的实例。 通过使用JSR 200规范中描述的许多技术来实现高度压缩。 一些技术是常量池的排序,重新排序和共同定位。

    包引擎初始化为初始状态,如下面的属性所述。 可以通过获取引擎属性(使用properties() )并将修改后的属性存储在地图上来操纵初始状态。 资源文件将通过而不进行任何更改。 类文件将不包含相同的字节,因为解包器可以自由更改次要类文件功能,例如常量池顺序。 但是,类文件在语义上是相同的,如The Java™ Virtual Machine Specification中所指定。

    默认情况下,打包器不会更改JAR元素的顺序。 此外,每个JAR元素的修改时间和通缩提示不变。 (任何其他ZIP存档信息,例如提供Unix文件权限的额外属性,都将丢失。)

    请注意,打包和解包JAR通常会改变JAR中类文件的字节内容。 这意味着打包和解包通常会使依赖于JAR元素的字节图像的任何数字签名无效。 为了签名和打包JAR,您必须首先打包并解压缩JAR以“规范化”它,然后在解压缩的JAR元素上计算签名,最后重新打包签名的JAR。 两个打包步骤应使用完全相同的选项,并且段限制也可能需要设置为“-1”,以防止段边界的意外变化,因为类文件大小稍有变化。

    (这就是为什么这样做的原因:任何类文件结构的任何重新排序包装器都是幂等的,所以第二个包装不会改变第一个包装产生的排序。另外,JSR 200规范保证解包器生成特定的按字节图像对于归档元素的任何给定传输顺序。)

    为了保持向后兼容性,将包文件的版本设置为容纳输入JAR文件中存在的类文件。 换句话说,如果类文件是最新的,则包文件版本将是最新的,如果类文件版本也是最旧的,则包文件版本将是最旧的。 对于中间类文件版本,将使用相应的包文件版本。 例如:如果输入JAR文件仅由1.5(或更小)类文件组成,则会生成1.5兼容包文件。 对于没有类文件的存档也是如此。 如果输入的JAR文件包含1.6类文件,则包文件版本将设置为1.6。

    注意:除非另有说明,否则将null参数传递给null中的构造函数或方法将导致抛出NullPointerException

    从以下版本开始:
    1.5
    • 字段汇总

      字段  
      变量和类型 字段 描述
      static String CLASS_ATTRIBUTE_PFX
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      当与类属性名称连接时,使用JSR 200规范中指定的布局语言指示该属性的格式。
      static String CODE_ATTRIBUTE_PFX
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      与代码属性名称连接时,表示该属性的格式。
      static String DEFLATE_HINT
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      如果此属性设置为 TRUEFALSE ,则 打包器将在输出存档中相应地设置放气提示,并且不会传输存档元素的各个放气提示。
      static String EFFORT
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      如果此属性设置为单个十进制数字,则打包器将使用指定的工作量来压缩存档。
      static String ERROR
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      字符串“error”,某些属性的可能值。
      static String FALSE
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      字符串“false”,某些属性的可能值。
      static String FIELD_ATTRIBUTE_PFX
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      与字段属性名称连接时,表示该属性的格式。
      static String KEEP
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      字符串“keep”,某些属性的可能值。
      static String KEEP_FILE_ORDER
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      如果此属性设置为 TRUE ,则 打包程序将在源存档中以原始顺序传输所有元素。
      static String LATEST
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      字符串“latest”,某些属性的可能值。
      static String METHOD_ATTRIBUTE_PFX
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      与方法属性名称连接时,表示该属性的格式。
      static String MODIFICATION_TIME
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      如果此属性设置为特殊字符串 LATEST ,则 打包程序将尝试确定原始存档中所有可用条目中的最新修改时间或每个段中所有可用条目的最新修改时间。
      static String PASS
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      字符串“pass”,某些属性的可能值。
      static String PASS_FILE_PFX
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      指示文件应按字节顺序传递,不进行压缩。
      static String PROGRESS
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      打包机的百分比进度,由打包机定期更新。
      static String SEGMENT_LIMIT
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      此属性是一个数字,给出每个归档段的估计目标大小N(以字节为单位)。
      static String STRIP
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      字符串“strip”,某些属性的可能值。
      static String TRUE
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      字符串“true”,某些属性的可能值。
      static String UNKNOWN_ATTRIBUTE
      不推荐使用,要删除:此API元素将在以后的版本中删除。
      指示遇到包含未知属性的类文件时要执行的操作。
    • 字段详细信息

      • SEGMENT_LIMIT

        static final String SEGMENT_LIMIT
        Deprecated, for removal: This API element is subject to removal in a future version.
        此属性是一个数字,给出每个归档段的估计目标大小N(以字节为单位)。 如果单个输入文件需要超过N个字节,则会为其提供自己的归档段。

        作为特殊情况,值-1将生成包含所有输入文件的单个大段,而值0将为每个类生成一个段。 较大的归档段导致较少的碎片和更好的压缩,但处理它们需要更多内存。

        通过计算要在段中传输的每个输入文件的大小以及其名称的大小和其他传输的属性来估计每个段的大小。

        默认值为-1,这意味着打包器将始终创建单个段输出文件。 在生成极大输出文件的情况下,强烈建议用户使用分段或将输入文件拆分为较小的JAR。

        在没有此限制的情况下打包的10Mb JAR通常会减小约10%,但是打包器可能需要更大的Java堆(约为段限制的十倍)。

        另请参见:
        常数字段值
      • KEEP_FILE_ORDER

        static final String KEEP_FILE_ORDER
        Deprecated, for removal: This API element is subject to removal in a future version.
        如果此属性设置为TRUE ,则打包程序将在源存档中以原始顺序传输所有元素。

        如果它设置为FALSE ,则打包器可能会重新排序元素,并且还会删除JAR目录条目,这些条目对Java应用程序没有任何有用的信息。 (通常这可以实现更好的压缩。)

        默认值为TRUE ,它保留输入信息,但可能导致传输的存档大于必要的大小。

        另请参见:
        常数字段值
      • EFFORT

        static final String EFFORT
        Deprecated, for removal: This API element is subject to removal in a future version.
        如果此属性设置为单个十进制数字,则打包器将使用指定的工作量来压缩存档。 1级可以产生更大的尺寸和更快的压缩速度,而9级将需要更长的时间但可以产生更好的压缩。

        特殊值0指示打包器直接复制原始JAR文件,不进行压缩。 JSR 200标准要求任何解包器将此特殊情况理解为整个存档的传递。

        默认值为5,投入适度的时间来产生合理的压缩。

        另请参见:
        常数字段值
      • DEFLATE_HINT

        static final String DEFLATE_HINT
        Deprecated, for removal: This API element is subject to removal in a future version.
        如果此属性设置为TRUEFALSE ,则打包器将在输出存档中相应地设置放气提示,并且不会传输存档元素的各个放气提示。

        如果此属性设置为特殊字符串KEEP ,则打包器将尝试为输入存档的每个可用元素确定独立的通缩提示,并单独传输此提示。

        默认值为KEEP ,它保留输入信息,但可能导致传输的存档大于必要的大小。

        解包器实现取决于提示以适当地压缩所得到的未包装罐的元件。

        ZIP或JAR元素的通缩提示表示元素是放气还是直接存储。

        另请参见:
        常数字段值
      • MODIFICATION_TIME

        static final String MODIFICATION_TIME
        Deprecated, for removal: This API element is subject to removal in a future version.
        如果此属性设置为特殊字符串LATEST ,则打包程序将尝试确定原始存档中所有可用条目中的最新修改时间或每个段中所有可用条目的最新修改时间。 此单个值将作为细分的一部分传输,并应用于每个细分的所有条目, SEGMENT_LIMIT

        这可以略微减少存档的传输大小,但代价是将所有已安装的文件设置为单个日期。

        如果此属性设置为特殊字符串KEEP ,则打包器会为每个输入元素发送单独的修改时间。

        默认值为KEEP ,它保留输入信息,但可能导致传输的存档大于必要的大小。

        解包器实现可以采取措施来适当地设置其输出文件的每个元素的修改时间。

        另请参见:
        SEGMENT_LIMIT常数字段值
      • PASS_FILE_PFX

        static final String PASS_FILE_PFX
        Deprecated, for removal: This API element is subject to removal in a future version.
        指示文件应按字节顺序传递,不进行压缩。 可以通过指定附加了不同字符串的附加属性来指定多个文件,以使一系列属性具有公共前缀。

        除了系统文件分隔符由JAR文件分隔符“/”替换之外,没有路径名转换。

        生成的文件名必须与在JAR文件中出现的字符串完全匹配。

        如果属性值是目录名,则该目录下的所有文件也将被传递。

        例子:

           Map p = packer.properties(); p.put(PASS_FILE_PFX+0, "mutants/Rogue.class"); p.put(PASS_FILE_PFX+1, "mutants/Wolverine.class"); p.put(PASS_FILE_PFX+2, "mutants/Storm.class"); # Pass all files in an entire directory hierarchy: p.put(PASS_FILE_PFX+3, "police/");  
        另请参见:
        常数字段值
      • UNKNOWN_ATTRIBUTE

        static final String UNKNOWN_ATTRIBUTE
        Deprecated, for removal: This API element is subject to removal in a future version.
        指示遇到包含未知属性的类文件时要执行的操作。 可能的值是字符串ERRORSTRIPPASS

        字符串ERROR表示整个包操作将失败,但类型为IOException 字符串STRIP表示将删除该属性。 字符串PASS表示整个类文件将在没有压缩的情况下通过(就好像它是一个资源文件),并带有适当的警告。 这是此属性的默认值。

        例子:

           Map p = pack200.getProperties(); p.put(UNKNOWN_ATTRIBUTE, ERROR); p.put(UNKNOWN_ATTRIBUTE, STRIP); p.put(UNKNOWN_ATTRIBUTE, PASS);  
        另请参见:
        常数字段值
      • CLASS_ATTRIBUTE_PFX

        static final String CLASS_ATTRIBUTE_PFX
        Deprecated, for removal: This API element is subject to removal in a future version.
        当与类属性名称连接时,使用JSR 200规范中指定的布局语言指示该属性的格式。

        例如,此选项的效果内置于: pack.class.attribute.SourceFile=RUH

        特殊字符串ERRORSTRIPPASS也可以,用相同的含义UNKNOWN_ATTRIBUTE 这为用户提供了一种方法,可以请求拒绝,剥离或按位传递特定属性(不进行类压缩)。

        像这样的代码可能用于支持JCOV的属性:

           Map p = packer.properties(); p.put(CODE_ATTRIBUTE_PFX+"CoverageTable", "NH[PHHII]"); p.put(CODE_ATTRIBUTE_PFX+"CharacterRangeTable", "NH[PHPOHIIH]"); p.put(CLASS_ATTRIBUTE_PFX+"SourceID", "RUH"); p.put(CLASS_ATTRIBUTE_PFX+"CompilationID", "RUH");  

        像这样的代码可能用于去除调试属性:

           Map p = packer.properties(); p.put(CODE_ATTRIBUTE_PFX+"LineNumberTable", STRIP); p.put(CODE_ATTRIBUTE_PFX+"LocalVariableTable", STRIP); p.put(CLASS_ATTRIBUTE_PFX+"SourceFile", STRIP);  
        另请参见:
        常数字段值
      • FIELD_ATTRIBUTE_PFX

        static final String FIELD_ATTRIBUTE_PFX
        Deprecated, for removal: This API element is subject to removal in a future version.
        与字段属性名称连接时,表示该属性的格式。 例如,此选项的效果内置于: pack.field.attribute.Deprecated= 特殊字符串ERRORSTRIPPASS也是允许的。
        另请参见:
        CLASS_ATTRIBUTE_PFX常数字段值
      • METHOD_ATTRIBUTE_PFX

        static final String METHOD_ATTRIBUTE_PFX
        Deprecated, for removal: This API element is subject to removal in a future version.
        与方法属性名称连接时,表示该属性的格式。 例如,此选项的效果内置于: pack.method.attribute.Exceptions=NH[RCH] 特殊字符串ERRORSTRIPPASS也是允许的。
        另请参见:
        CLASS_ATTRIBUTE_PFX常数字段值
      • CODE_ATTRIBUTE_PFX

        static final String CODE_ATTRIBUTE_PFX
        Deprecated, for removal: This API element is subject to removal in a future version.
        与代码属性名称连接时,表示该属性的格式。 例如,此选项的效果内置于: pack.code.attribute.LocalVariableTable=NH[PHOHRUHRSHH] 特殊字符串ERRORSTRIPPASS也是允许的。
        另请参见:
        CLASS_ATTRIBUTE_PFX常数字段值
      • PROGRESS

        static final String PROGRESS
        Deprecated, for removal: This API element is subject to removal in a future version.
        打包机的百分比进度,由打包机定期更新。 值0到100是正常的,-1表示停顿。 可以通过轮询此属性的值来监视进度。

        封隔器至少必须在包装操作开始时将进度设置为0,并在结束时将进度设置为100。

        另请参见:
        常数字段值
      • LATEST

        static final String LATEST
        Deprecated, for removal: This API element is subject to removal in a future version.
        字符串“latest”,某些属性的可能值。
        另请参见:
        MODIFICATION_TIME常数字段值
    • 方法详细信息

      • properties

        SortedMap<String,​String> properties()
        Deprecated, for removal: This API element is subject to removal in a future version.
        获取此引擎属性的集合。 此设置是“实时视图”,因此更改其内容会立即影响Packer引擎,并且地图中会立即显示引擎的更改(例如进度指示)。

        属性映射可能包含预定义的实现特定和默认属性。 在修改预先存在的属性之前,建议用户阅读信息并充分理解其含义。

        实现特定属性的前缀是与实现者关联的包名称,以com.或类似的前缀开头。 所有以pack.unpack.开头的属性名称都保留供此API使用。

        使用未指定的错误可能会忽略或拒绝未知属性,无效条目可能会导致抛出未指定的错误。

        返回的映射实现所有可选的SortedMap操作

        结果
        属性键字符串与属性值的排序关联。
      • pack

        void pack​(JarFile in,
                  OutputStream out)
           throws IOException
        Deprecated, for removal: This API element is subject to removal in a future version.
        使用JarFile并将其转换为Pack200存档。

        关闭其输入但不关闭其输出。 (Pack200档案是可附加的。)

        参数
        in - 一个JarFile
        out - 一个OutputStream
        异常
        IOException - 如果遇到错误。
      • pack

        void pack​(JarInputStream in,
                  OutputStream out)
           throws IOException
        Deprecated, for removal: This API element is subject to removal in a future version.
        获取JarInputStream并将其转换为Pack200存档。

        关闭其输入但不关闭其输出。 (Pack200档案是可附加的。)

        对于JAR清单文件及其包含目录,修改时间和通缩提示属性不可用。

        参数
        in - JarInputStream
        out - 一个OutputStream
        异常
        IOException - 如果遇到错误。
        另请参见:
        MODIFICATION_TIMEDEFLATE_HINT