public static interface Pack200.Packer
Pack200.newPacker()
。压缩的高度是通过使用一些在JSR 200规范中描述的技术实现。一些技术是排序,重新排序和共同位置的常数池。
包引擎被初始化为一个初始状态,所描述的属性如下。初始状态可以通过发动机性能的操纵(使用properties()
)和Map存储修改的性质。资源文件将被通过,没有任何变化。这类文件将不包含相同的字节,因为可以自由变化较小的类文件等功能的常量池阶。然而,这类文件将语义相同的,按The Java™ Virtual Machine Specification。
默认情况下,封隔器不会更改容器元素的顺序。此外,修改时间和每个罐子元素的通缩提示被传递不变。(其他的ZIP文件的信息,如额外的属性给UNIX文件权限,都失去了。)
注意,包装和拆包一罐一般会改变罐中的该类文件的内容。这意味着,包装和拆包一般会使任何数字签名依赖于罐该图像元素。为了标志和包装瓶,你首先必须打包和解包jar“正常化”,然后计算上的签名打开罐子的元素,并重新打包签名的jar。两个包装步骤都应该使用相同的选项,并且段限制可能也需要被设置为“- 1”,以防止段边界的意外变化,因为类文件大小略有变化。
(这就是为什么这个作品:任何排序的类文件结构的封隔器是幂等的,所以第二包装不改变第一包装生产的序。另外,解包是保证JSR 200规范对于任何给定的传输档案元素的排序产生特定的该图像。)
为了保持向后兼容性,包文件的版本将被设置为容纳在输入的文件中存在的类文件。换言之,包文件版本将是最新的,如果类文件是最新的,相反的包文件版本将是最古老的,如果类文件版本也是最古老的。对于中间类的文件版本,相应的包文件版本将被使用。例如:如果输入的文件只包含1.5(或较小)类文件,则产生了一个1.5兼容的包文件。这也将是没有类文件的档案的情况。如果输入的文件包含一个1.6级文件,那么这个包文件版本将被设置为1.6。
注意:除非另有说明,通过null争论这类构造函数或方法会导致一个NullPointerException
被。
Modifier and Type | Field and Description |
---|---|
static String |
CLASS_ATTRIBUTE_PFX
当级联与类属性名称,表明该属性的格式,使用JSR 200规范规定的版面语言。
|
static String |
CODE_ATTRIBUTE_PFX
当与一个代码属性名称连接时,表示该属性的格式。
|
static String |
DEFLATE_HINT
|
static String |
EFFORT
如果将此属性设置为一个十进制数字,则该封隔器将使用所显示的压缩量来压缩压缩包中的文件量。
|
static String |
ERROR
字符串“错误”,某些属性的可能值。
|
static String |
FALSE
字符串“假”,某些属性的可能值。
|
static String |
FIELD_ATTRIBUTE_PFX
当与字段属性名称连接时,表示该属性的格式。
|
static String |
KEEP
字符串“保持”,某些属性的可能值。
|
static String |
KEEP_FILE_ORDER
如果此属性设置为
TRUE ,封隔器将所有元素在原来的顺序在源文件。
|
static String |
LATEST
字符串“最新”,某些属性的可能值。
|
static String |
METHOD_ATTRIBUTE_PFX
当用一个方法属性名称连接时,表示该属性的格式。
|
static String |
MODIFICATION_TIME
如果此属性设置为特殊字符串
LATEST ,封隔器将试图确定最新的修改时间,在原来的档案或每段中所有可用的记录最新修改时间所有可用的项目中。
|
static String |
PASS
字符串“通”,某些属性的可能值。
|
static String |
PASS_FILE_PFX
表示一个文件要通过该,无压缩。
|
static String |
PROGRESS
解包的过程的一部分,由可以定期更新。
|
static String |
SEGMENT_LIMIT
此属性是一个数字,使估计的目标大小N(以字节为单位)的每一个归档段。
|
static String |
STRIP
字符串“条”,某些属性的可能值。
|
static String |
TRUE
字符串“真正”,某些属性的可能值。
|
static String |
UNKNOWN_ATTRIBUTE
指示遇到一个包含未知属性的类文件时所采取的动作。
|
Modifier and Type | Method and Description |
---|---|
default void |
addPropertyChangeListener(PropertyChangeListener listener)
过时的。
在
PropertyChangeListener 依赖创造未来的java平台模块化的一个重大障碍。这种方法将在未来的版本中删除。需要监视的封隔器进步应用可以投票的PROGRESS 属性的值代替。
|
void |
pack(JarFile in, OutputStream out)
需要时,将它转换成一个pack200档案。
|
void |
pack(JarInputStream in, OutputStream out)
以JarInputStream和将其转换成pack200档案。
|
SortedMap<String,String> |
properties()
获取此引擎属性的集合。
|
default void |
removePropertyChangeListener(PropertyChangeListener listener)
过时的。
在
PropertyChangeListener 依赖创造未来的java平台模块化的一个重大障碍。这种方法将在未来的版本中删除。
|
static final String SEGMENT_LIMIT
作为一个特殊的情况下,一个值- 1将产生一个单一的大段与所有的输入文件,而0的值将产生一个段为每个类。较大的归档段导致更少的碎片和更好的压缩,但处理它们需要更多的内存。
每个段的大小是通过计算在该段中的每个输入文件的大小,以及它的名称和其他传输属性的大小来估计的。
默认为- 1,这意味着封隔器将始终创建一个单一的段输出文件。在产生非常大的输出文件的情况下,用户强烈鼓励使用分割或将输入文件分解成更小的罐子。
一个10MB的罐包装的没有这个限制通常会包大约减少了10%,但封隔器可能需要更大的java堆(关于段限十次)。
static final String KEEP_FILE_ORDER
TRUE
,封隔器将所有元素在原来的顺序在源文件。
如果它被设置为FALSE
,封隔器可重新排序的元素,和jar的目录条目也删除,不携带有用信息的java应用程序。(通常情况下,可以更好的压缩。)
默认的是TRUE
,它保留了输入的信息,但可能会导致传输的档案要比需要的更大。
static final String EFFORT
特殊值0指示封隔器直接拷贝通过原始的罐子文件,没有压缩。JSR 200标准要求的任何可以理解这种特殊情况下,通过整个档案。
默认为5,投资一个适度的时间来产生合理的压缩。
static final String DEFLATE_HINT
TRUE
或
FALSE
,封隔器会在输出文件设置相应的通缩暗示,不会将个人档案元素通缩暗示。
如果此属性设置为特殊字符串KEEP
,封隔器将试图确定每个可用的输入档案元素独立的通货紧缩的暗示,和传递这个暗示分别。
默认的是KEEP
,它保留了输入的信息,但可能会导致传输的档案要比需要的更大。
它是由解包实现采取行动暗示,适当压缩产生的元素包装罐。
一个zip或jar元素指示元素是否缩小或直接存储的通货紧缩的暗示。
static final String MODIFICATION_TIME
LATEST
,封隔器将试图确定最新的修改时间,在原来的档案或每段中所有可用的记录最新修改时间所有可用的项目中。这种单一的价值将被发送的段部分,适用于所有的条目,每一段,
SEGMENT_LIMIT
。
这可以轻微降低归档的发送大小,以牺牲设置所有已安装的文件到一个单一日期。
如果此属性设置为特殊字符串KEEP
,封隔器将每个输入元素单独修改时间。
默认的是KEEP
,它保留了输入的信息,但可能会导致传输的档案要比需要的更大。
它是由解包实现采取适当设置其输出文件的每个元素的修改时间。
static final String PASS_FILE_PFX
没有路径的转型,除了系统文件分离器改为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/");
static final String UNKNOWN_ATTRIBUTE
ERROR
,
STRIP
,和
PASS
字符串ERROR
意味着包作为一个整体的操作会失败,随着型IOException
例外。字符串STRIP
意味着属性将下降。字符串PASS
意味着整个类文件将通过(如果它是一个资源文件)无压缩,用适当的警告。这是此属性的默认值。
实例:
Map p = pack200.getProperties();
p.put(UNKNOWN_ATTRIBUTE, ERROR);
p.put(UNKNOWN_ATTRIBUTE, STRIP);
p.put(UNKNOWN_ATTRIBUTE, PASS);
。
static final String CLASS_ATTRIBUTE_PFX
例如,此选项的作用是建立在:pack.class.attribute.SourceFile=RUH
。
特殊的字符串ERROR
,STRIP
,和PASS
也是允许的,与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);
static final String FIELD_ATTRIBUTE_PFX
static final String METHOD_ATTRIBUTE_PFX
static final String CODE_ATTRIBUTE_PFX
static final String PROGRESS
至少,解包必须设置为0在包装操作开始,到100月底。
static final String KEEP
static final String PASS
static final String STRIP
static final String ERROR
static final String TRUE
static final String FALSE
static final String LATEST
SortedMap<String,String> properties()
属性映射可能包含预定义的实现特定和默认属性。鼓励用户阅读的信息,并充分理解的影响,修改前的预先存在的属性。
实施的具体性质是带有与实现相关的软件包的名称,与com.或类似的前缀开始。所有属性名称开始pack.和unpack.保留使用这个API。
未知属性可能会被忽略或拒绝与一个未指定的错误,和无效的条目可能会导致一个未指定的错误被抛出。
返回Map实现了所有可选的SortedMap
操作
void pack(JarFile in, OutputStream out) throws IOException
关闭它的输入,但关闭它的输出。(pack200档案可追加。)
in
-时
out
-一个输出流
IOException
-如果遇到错误。
void pack(JarInputStream in, OutputStream out) throws IOException
关闭它的输入,但关闭它的输出。(pack200档案可追加。)
修改时间和放气提示属性不可用,为“罐子清单”文件和它的包含目录。
in
- jarinputstream
out
-一个输出流
IOException
-如果遇到错误。
MODIFICATION_TIME
,
DEFLATE_HINT
@Deprecated default void addPropertyChangeListener(PropertyChangeListener listener)
PropertyChangeListener
依赖创造未来的java平台模块化的一个重大障碍。这种方法将在未来的版本中删除。需要监视的封隔器进步应用可以投票的PROGRESS
属性的值代替。
这种方法的默认实现不做任何事,也没有副作用。
警告:这种方法在java SE,不包括java.beans
软件包的所有子集配置接口声明略。
listener
对象被调用时,一个属性发生了变化。
properties()
,
PROGRESS
@Deprecated default void removePropertyChangeListener(PropertyChangeListener listener)
PropertyChangeListener
依赖创造未来的java平台模块化的一个重大障碍。这种方法将在未来的版本中删除。
addPropertyChangeListener(java.beans.PropertyChangeListener)
添加。
这种方法的默认实现不做任何事,也没有副作用。
警告:这种方法在java SE,不包括java.beans
软件包的所有子集配置接口声明略。
listener
- propertychange听众被删除。
addPropertyChangeListener(java.beans.PropertyChangeListener)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.