Pack200.IPacker Interfaz
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
El motor de packer aplica varias transformaciones al archivo JAR de entrada, lo que hace que el flujo del paquete sea altamente comprimible por un compresor como gzip o zip.
[Android.Runtime.Register("java/util/jar/Pack200$Packer", "", "Java.Util.Jar.Pack200/IPackerInvoker")]
public interface Pack200.IPacker : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/jar/Pack200$Packer", "", "Java.Util.Jar.Pack200/IPackerInvoker")>]
type Pack200.IPacker = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- Atributos
- Implementaciones
Comentarios
El motor de packer aplica varias transformaciones al archivo JAR de entrada, lo que hace que el flujo del paquete sea altamente comprimible por un compresor como gzip o zip. Se puede obtener una instancia del motor mediante #newPacker
.
El alto grado de compresión se logra mediante una serie de técnicas descritas en la especificación JSR 200. Algunas de las técnicas están ordenando, reordenación y colocalización del grupo de constantes.
El motor de paquetes se inicializa en un estado inicial, tal como se describe en sus propiedades a continuación. El estado inicial se puede manipular obteniendo las propiedades del motor (mediante #properties
) y almacenando las propiedades modificadas en el mapa. Los archivos de recursos se pasarán sin cambios en absoluto. Los archivos de clase no contendrán bytes idénticos, ya que el desempaquetador es libre de cambiar las características de archivo de clase secundarias, como el orden del grupo de constantes. Sin embargo, los archivos de clase serán semánticamente idénticos, como se especifica en <la cita>Java™ Especificación</cita> de máquina virtual.
De forma predeterminada, el empaquetador no cambia el orden de los elementos JAR. Además, la sugerencia de tiempo de modificación y deflación de cada elemento JAR se pasa sin cambios. (Se pierde cualquier otra información de archivo ZIP, como atributos adicionales que proporcionan permisos de archivo Unix).
Tenga en cuenta que el empaquetado y desempaquetado de un ARCHIVO JAR modificará generalmente el contenido bytewise de los archivos de clase en el ARCHIVO JAR. Esto significa que el empaquetado y el desempaquetado invalidarán en general las firmas digitales que se basan en imágenes bytewise de elementos JAR. Para firmar y empaquetar un ARCHIVO JAR, primero debe empaquetar y desempaquetar el ARCHIVO JAR para "normalizarlo", luego calcular firmas en los elementos JAR desempaquetados y, por último, volver a empaquetar el ARCHIVO JAR firmado. Ambos pasos de empaquetado deben usar exactamente las mismas opciones, y es posible que el límite de segmento también tenga que establecerse en "-1", para evitar una variación accidental de los límites de segmento a medida que los tamaños de archivo de clase cambian ligeramente.
(Este es el motivo por el que funciona: cualquier reordenamiento que haga el empaquetador de cualquier estructura de archivo de clase es idempotent, por lo que el segundo empaquetado no cambia las ordenaciones producidas por el primer empaquetado. Además, el desempaquetador está garantizado por la especificación JSR 200 para generar una imagen bytewise específica para cualquier ordenación de transmisión dada de los elementos de archivo).
Para mantener la compatibilidad con versiones anteriores, la versión del archivo de paquete se establece para dar cabida a los archivos de clase presentes en el archivo JAR de entrada. En otras palabras, la versión del archivo de paquete será la más reciente, si los archivos de clase son los más recientes y, por el contrario, la versión del archivo de paquete será la más antigua si las versiones de archivo de clase también son las más antiguas. En el caso de las versiones intermedias del archivo de clase, se usará la versión del archivo de paquete correspondiente. Por ejemplo: si los archivos JAR de entrada se componen únicamente de archivos de clase 1.5 (o inferior), se genera un archivo de paquete compatible con 1.5. Esto también será el caso de los archivos que no tienen archivos de clase. Si los archivos JAR de entrada contienen un archivo de clase 1.6, la versión del archivo de paquete se establecerá en 1.6.
Nota: A menos que se indique lo contrario, pasar un null
argumento a un constructor o método de esta clase hará que se produzca un NullPointerException
.
Agregado en 1.5.
Documentación de Java para java.util.jar.Pack200.Packer
.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.
Campos
ClassAttributePfx |
Cuando se concatena con un nombre de atributo de clase, indica el formato de ese atributo, mediante el lenguaje de diseño especificado en la especificación JSR 200. |
CodeAttributePfx |
Cuando se concatena con un nombre de atributo de código, indica el formato de ese atributo. |
DeflateHint |
Si esta propiedad se establece |
Effort |
Si esta propiedad se establece en un solo dígito decimal, el empaquetador usará la cantidad de esfuerzo indicada para comprimir el archivo. |
Error |
Cadena "error", un valor posible para determinadas propiedades. |
False |
Cadena "false", un valor posible para determinadas propiedades. |
FieldAttributePfx |
Cuando se concatena con un nombre de atributo de campo, indica el formato de ese atributo. |
Keep |
Cadena "keep", un valor posible para determinadas propiedades. |
KeepFileOrder |
Si esta propiedad se establece |
Latest |
Cadena "latest", un valor posible para determinadas propiedades. |
MethodAttributePfx |
Cuando se concatena con un nombre de atributo de método, indica el formato de ese atributo. |
ModificationTime |
Si esta propiedad se establece en la cadena |
Pass |
Cadena "pass", un valor posible para determinadas propiedades. |
PassFilePfx |
Indica que un archivo debe pasarse a través de bytewise, sin compresión. |
Progress |
El progreso del desempaquetador como porcentaje, tal como lo actualiza periódicamente el desempaquetador. |
SegmentLimit |
Esta propiedad es un número que proporciona el tamaño de destino estimado N (en bytes) de cada segmento de archivo. |
Strip |
Cadena "strip", un valor posible para determinadas propiedades. |
True |
Cadena "true", un valor posible para determinadas propiedades. |
UnknownAttribute |
Indica la acción que se debe realizar cuando se encuentra un archivo de clase que contiene un atributo desconocido. |
Propiedades
Handle |
Obtiene el valor JNI del objeto Android subyacente. (Heredado de IJavaObject) |
JniIdentityHashCode |
Devuelve el valor de |
JniManagedPeerState |
Estado del mismo nivel administrado. (Heredado de IJavaPeerable) |
JniPeerMembers |
Compatibilidad con la invocación y el acceso de miembros. (Heredado de IJavaPeerable) |
PeerReference |
Devuelve una JniObjectReference de la instancia de objeto Java ajustada. (Heredado de IJavaPeerable) |
Métodos
AddPropertyChangeListener(IPropertyChangeListener) |
Registra un agente de escucha para eventos PropertyChange en el mapa de propiedades. |
Disposed() |
Se llama cuando se ha eliminado la instancia. (Heredado de IJavaPeerable) |
DisposeUnlessReferenced() |
Si no hay referencias pendientes a esta instancia, llama a |
Finalized() |
Se llama cuando se ha finalizado la instancia. (Heredado de IJavaPeerable) |
Pack(JarFile, Stream) |
Toma un archivo JarFile y lo convierte en un archivo Pack200. |
Pack(JarInputStream, Stream) |
Toma un archivo JarInputStream y lo convierte en un archivo Pack200. |
Properties() |
Obtenga el conjunto de propiedades de este motor. |
RemovePropertyChangeListener(IPropertyChangeListener) |
Quite un agente de escucha para los eventos PropertyChange, agregados por . |
SetJniIdentityHashCode(Int32) |
Establezca el valor devuelto por |
SetJniManagedPeerState(JniManagedPeerStates) |
El motor de packer aplica varias transformaciones al archivo JAR de entrada, lo que hace que el flujo del paquete sea altamente comprimible por un compresor como gzip o zip. (Heredado de IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Establezca el valor devuelto por |
UnregisterFromRuntime() |
Anule el registro de esta instancia para que el entorno de ejecución no lo devuelva de invocaciones futuras Java.Interop.JniRuntime+JniValueManager.PeekValue . (Heredado de IJavaPeerable) |
Métodos de extensión
JavaCast<TResult>(IJavaObject) |
Realiza una conversión de tipos comprobados en tiempo de ejecución de Android. |
JavaCast<TResult>(IJavaObject) |
El motor de packer aplica varias transformaciones al archivo JAR de entrada, lo que hace que el flujo del paquete sea altamente comprimible por un compresor como gzip o zip. |
GetJniTypeName(IJavaPeerable) |
El motor de packer aplica varias transformaciones al archivo JAR de entrada, lo que hace que el flujo del paquete sea altamente comprimible por un compresor como gzip o zip. |
PackAsync(Pack200+IPacker, JarFile, Stream) |
El motor de packer aplica varias transformaciones al archivo JAR de entrada, lo que hace que el flujo del paquete sea altamente comprimible por un compresor como gzip o zip. |
PackAsync(Pack200+IPacker, JarInputStream, Stream) |
El motor de packer aplica varias transformaciones al archivo JAR de entrada, lo que hace que el flujo del paquete sea altamente comprimible por un compresor como gzip o zip. |