Spec-Zone .ru
спецификации, руководства, описания, API
|
public static interface Pack200.Packer
Pack200.newPacker()
. Высокая степень сжатия достигается при использовании многих методов, описанных в JSR 200 спецификаций. Некоторые из методов сортируют, переупорядочивая и cо-расположение постоянного пула. Механизм пакета инициализируется к начальному состоянию как описано их свойствами ниже. Начальным состоянием можно управлять, получая свойства механизма (использование properties()
) и хранение измененных свойств на карте. Через файлы ресурсов пройдут без изменений вообще. Файлы class не будут содержать идентичные байты, так как неупаковщик свободен изменить незначительные функции файла class, такие как постоянный порядок пула. Однако, файлы class будут семантически идентичны, как определено в Спецификации Виртуальной машины Java™.
По умолчанию упаковщик не изменяет порядок элементов JAR. Кроме того, подсказку времени изменения и дефляции каждого элемента JAR передают неизменная. (Любая другая информация об архиве ZIP, такая как дополнительные атрибуты, дающие полномочия файла Unix, теряется.)
Отметьте, что упаковка и распаковка JAR вообще изменят bytewise содержание classfiles в JAR. Это означает, что упаковка и распаковка вообще лишат законной силы любые цифровые подписи, которые полагаются на bytewise изображения элементов JAR. В порядке и чтобы подписаться и упаковать JAR, следует сначала упаковать и распаковать JAR, чтобы "нормализовать" это, затем вычислить подписи на распакованных элементах JAR, и наконец перепаковать подписанный JAR. И упаковка шагов должна использовать точно те же самые опции, и предел сегмента, возможно, также должен быть установлен к "-1", предотвратить случайное изменение границ сегмента, поскольку размеры файла class изменяются немного.
(Вот то, почему это работает: Любое переупорядочение упаковщика делает любых classfile структур, идемпотент, таким образом, вторая упаковка не изменяет упорядочивания, произведенные первой упаковкой. Кроме того, неупаковщику гарантирует JSR 200 спецификаций, чтобы произвести определенное изображение bytewise для любого данного упорядочивания передачи элементов архива.)
Чтобы поддержать обратную совместимость, версия файла пакета устанавливается разместить файлы class, существующие во входном файле JAR. Другими словами версия файла пакета будет последней, если файлы class будут последними, и наоборот версия файла пакета будет самой старой, если версии файла class будут также самыми старыми. Для промежуточного class версии файла будет использоваться соответствующая версия файла пакета. Например: Если входные файлы JAR исключительно состоят 1.5 (или меньший) файлы class, производятся 1.5 совместимых файла пакета. Это будет также иметь место для архивов, у которых нет никаких файлов class. Если входные файлы JAR будут содержать 1.6 файла class, то версия файла пакета будет установлена в 1.6.
Отметьте: Если не указано иное, передача параметра null конструктору или методу в этом class вызовет a NullPointerException
быть брошенным.
Модификатор и Тип | Поле и Описание |
---|---|
static String |
CLASS_ATTRIBUTE_PFX
Когда связано с названием атрибута class, указывает на формат того атрибута, используя язык расположения, определенный в JSR 200 спецификаций.
|
static String |
CODE_ATTRIBUTE_PFX
Когда связано с названием атрибута кода, указывает на формат того атрибута.
|
static String |
DEFLATE_HINT
|
static String |
УСИЛИЕ
Если это свойство будет установлено в единственную десятичную цифру, то упаковщик будет использовать обозначенное усилие в сжатии архива.
|
static String |
ОШИБКА
Строка "ошибка", возможное значение для определенных свойств.
|
static String |
ЛОЖЬ
Строка "ложь", возможное значение для определенных свойств.
|
static String |
FIELD_ATTRIBUTE_PFX
Когда связано с полевым названием атрибута, указывает на формат того атрибута.
|
static String |
СОХРАНИТЬ
Строка "сохраняет", возможное значение для определенных свойств.
|
static String |
KEEP_FILE_ORDER
Если это свойство устанавливается в
TRUE , упаковщик передаст все элементы в их первоначальном заказе в пределах исходного архива. |
static String |
ПОСЛЕДНИЙ
"Последняя" строка, возможное значение для определенных свойств.
|
static String |
METHOD_ATTRIBUTE_PFX
Когда связано с названием атрибута метода, указывает на формат того атрибута.
|
static String |
MODIFICATION_TIME
Если это свойство устанавливается в специальную строку
LATEST , упаковщик попытается определить последнее время изменения среди всех доступных записей в исходном архиве или последнее время изменения всех доступных записей в каждом сегменте. |
static String |
ПЕРЕДАЧА
Строка "передача", возможное значение для определенных свойств.
|
static String |
PASS_FILE_PFX
Указывает, что через файл нужно пройти bytewise без сжатия.
|
static String |
ПРОДВИЖЕНИЕ
Продвижение неупаковщика как процент, как периодически обновлено неупаковщиком.
|
static String |
SEGMENT_LIMIT
Это свойство является цифрой, дающей предполагаемый целевой размер N (в байтах) каждого сегмента архива.
|
static String |
ПОЛОСА
Строка "полоса", возможное значение для определенных свойств.
|
static String |
ИСТИНА
Строка "истина", возможное значение для определенных свойств.
|
static String |
UNKNOWN_ATTRIBUTE
Указывает на действие, чтобы взять, когда class - с файлом, содержащим неизвестный атрибут, встречаются.
|
Модификатор и Тип | Метод и Описание |
---|---|
default void |
addPropertyChangeListener(PropertyChangeListener listener)
Осуждаемый.
Зависимость от
PropertyChangeListener создает существенное препятствие для будущей модуляризации платформы Java. Этот метод будет удален в будущем выпуске. Приложения, которые должны контролировать продвижение упаковщика, могут опросить значение PROGRESS свойство вместо этого. |
void |
pack(JarFile in, OutputStream out)
Берет JarFile и преобразовывает это в архив 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 произведет один сегмент для каждого class. Больший результат сегментов архива на меньшем количестве фрагментации и лучшее сжатие, но обработка их требуют большего количества памяти.
Размер каждого сегмента оценивается, считая размер каждого входного файла, который будет передан в сегменте, наряду с размером его имени и других переданных свойств.
Значение по умолчанию-1, что означает, что упаковщик будет всегда создавать единственный выходной файл сегмента. В случаях, где файлы чрезвычайно крупносерийного производства сгенерированы, пользователи строго поощряются использовать сегментацию или разбить входной файл в меньшие JAR.
JAR 10 МБ, упакованный без этого предела, будет обычно упаковывать приблизительно на 10 % меньший, но упаковщик может потребовать большей "кучи" Java (приблизительно десять раз предел сегмента).
static final String KEEP_FILE_ORDER
TRUE
, упаковщик передаст все элементы в их первоначальном заказе в пределах исходного архива. Если это устанавливается в FALSE
, упаковщик может переупорядочить элементы, и также удалить записи в каталоге JAR, которые не переносят полезной информации для приложений Java. (Обычно это включает лучшему сжатию.)
Значение по умолчанию TRUE
, который сохраняет информацию о вводе, но может заставить переданный архив быть больше чем необходимый.
static final String EFFORT
Специальное значение 0 дает упаковщику команду копировать через исходный файл JAR непосредственно без сжатия. JSR 200 стандартов требует, чтобы любой неупаковщик понял этот особый случай как передачу всего архива.
Значение по умолчанию 5, инвестируя скромное количество времени, чтобы произвести разумное сжатие.
static final String DEFLATE_HINT
TRUE
или FALSE
, упаковщик установит подсказку дефляции соответственно в выходном архиве, и не будет передавать отдельные подсказки дефляции элементов архива. Если это свойство устанавливается в специальную строку KEEP
, упаковщик попытается определить независимую подсказку дефляции для каждого доступного элемента входного архива, и передать эту подсказку отдельно.
Значение по умолчанию KEEP
, который сохраняет информацию о вводе, но может заставить переданный архив быть больше чем необходимый.
Это до реализации неупаковщика, чтобы принять меры после подсказки, чтобы соответственно сжать элементы получающейся распакованной фляги.
Подсказка дефляции ZIP или элемента JAR указывает, был ли элемент выкачан или сохранен непосредственно.
static final String MODIFICATION_TIME
LATEST
, упаковщик попытается определить последнее время изменения среди всех доступных записей в исходном архиве или последнее время изменения всех доступных записей в каждом сегменте. Это единственное значение будет передано как часть сегмента и применено ко все записи в каждом сегменте, SEGMENT_LIMIT
. Это может незначительно уменьшить переданный размер архива, за счет установки всех установленных файлов к единственной дате.
Если это свойство устанавливается в специальную строку KEEP
, упаковщик передает отдельное время изменения для каждого входного элемента.
Значение по умолчанию KEEP
, который сохраняет информацию о вводе, но может заставить переданный архив быть больше чем необходимый.
Это до реализации неупаковщика, чтобы принять меры, чтобы соответственно установить время изменения каждого элемента его выходного файла.
SEGMENT_LIMIT
, Постоянные Значения полейstatic final String PASS_FILE_PFX
Нет никакого преобразования пути, за исключением того, что разделитель системного файла заменяется разделителем файлов 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/");
.static final String UNKNOWN_ATTRIBUTE
ERROR
, STRIP
, и PASS
. Строка ERROR
средства, которые работа пакета в целом приведет к сбою с исключением типа IOException
. Строка STRIP
средства, что атрибут будет отброшен. Строка PASS
средства, что через целый class - файл пройдут (как будто это был файл ресурсов) без сжатия, с подходящим предупреждением. Это - значение по умолчанию для этого свойства.
Примеры:
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
. Это обеспечивает способ для пользователей запросить, чтобы определенные атрибуты быть отказанными, разделили, или передали поразрядный (без сжатия class).
Код как это мог бы использоваться, чтобы поддерживать атрибуты для ЙКОВА:
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
pack.field.attribute.Deprecated=
. Специальные строки ERROR
, STRIP
, и PASS
также позволяются.CLASS_ATTRIBUTE_PFX
, Постоянные Значения полейstatic final String METHOD_ATTRIBUTE_PFX
pack.method.attribute.Exceptions=NH[RCH]
. Специальные строки ERROR
, STRIP
, и PASS
также позволяются.CLASS_ATTRIBUTE_PFX
, Постоянные Значения полейstatic final String CODE_ATTRIBUTE_PFX
pack.code.attribute.LocalVariableTable=NH[PHOHRUHRSHH]
. Специальные строки ERROR
, STRIP
, и PASS
также позволяются.CLASS_ATTRIBUTE_PFX
, Постоянные Значения полейstatic final String PROGRESS
Как минимум неупаковщик должен установить продвижение в 0 в начале работы упаковки, и в 100 в конце.
static final String KEEP
DEFLATE_HINT
, MODIFICATION_TIME
, Постоянные Значения полейstatic final String PASS
static final String STRIP
static final String ERROR
static final String TRUE
KEEP_FILE_ORDER
, DEFLATE_HINT
, Постоянные Значения полейstatic final String FALSE
KEEP_FILE_ORDER
, DEFLATE_HINT
, Постоянные Значения полейstatic final String LATEST
MODIFICATION_TIME
, Постоянные Значения полейSortedMap<String,String> properties()
Карта свойства может содержать предопределенную определенную реализацию и свойства значения по умолчанию. Пользователи поощряются считать информацию и полностью понять импликации, прежде, чем изменить существующие ранее свойства.
Реализация определенные свойства снабжается префиксом имя пакета, связанное с конструктором, начинаясь с com. или подобного префикса. Все имена свойства, начинающиеся с pack. и unpack., резервируются для использования этим API.
Неизвестные свойства могут быть проигнорированы или отклонены с неустановленной ошибкой, и недопустимые записи могут заставить неустановленную ошибку быть брошенной.
Возвращенная карта реализует всех дополнительных SortedMap
операции
void pack(JarFile in, OutputStream out) throws IOException
Закрывает его ввод, но не его вывод. (Архивы Pack200 являются appendable.)
in
- JarFileout
- OutputStreamIOException
- если с ошибкой встречаются.void pack(JarInputStream in, OutputStream out) throws IOException
Закрывает его ввод, но не его вывод. (Архивы Pack200 являются appendable.)
Время изменения и атрибуты подсказки дефляции не доступны для файла манифеста JAR и его содержания каталога.
in
- JarInputStreamout
- OutputStreamIOException
- если с ошибкой встречаются.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)
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92