Pack200.IPacker 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 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
- 屬性
- 實作
備註
封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 zip 高度壓縮。 引擎 #newPacker的實例可用 取得。
高壓縮程度是透過 JSR 200 規範中描述的多種技術來達成的。 其中一些技術包括排序、重新排序以及常數池的共址。
包裝引擎初始化為以下屬性描述的初始狀態。 初始狀態可以透過取得引擎屬性(使用 #properties)並將修改後的屬性儲存在地圖上來操作。 資源檔案會直接傳遞,完全不會做任何修改。 類別檔案不會包含相同的位元組,因為解封器可以自由更改次要類別檔案特徵,例如常數池的順序。 然而,類別檔案在語義上將完全相同,如
預設情況下,封包器不會改變 JAR 元素的順序。 此外,每個JAR元件的修改時間與壓縮提示也保持不變。 (其他 ZIP 壓縮資訊,例如賦予 Unix 檔案權限的額外屬性,則會遺失。)
請注意,打包與解壓 JAR 通常會改變 JAR 中類別檔案的位元組內容。 這表示打包與解包通常會使依賴 JAR 元素逐位元組影像的數位簽章失效。 要同時簽署並打包 JAR,你必須先打包並解包 JAR 來「正規化」它,接著對已解包的 JAR 元件計算簽章,最後重新打包已簽字的 JAR。 兩個打包步驟應使用完全相同的選項,且區段限制可能也需設定為「-1」,以防止類別檔案大小略有變動時區段邊界的意外變動。
(原因如下:packer 對任何類別檔案結構的重新排序都是冪元的,因此第二次打包不會改變第一次打包產生的排序。此外,JSR 200 規範保證解封器能針對任何特定的壓縮元素傳輸順序產生特定的位元組影像。)
為了維持向下相容,套件檔案的版本會設定為容納輸入 JAR 檔案中的類別檔案。 換句話說,若類別檔案是最新的,則該套件檔案版本為最新版本;反之,若類別檔案版本也是最新版本,則該套件檔案版本為最舊。 對於中間類別檔案版本,將使用對應的套件檔案版本。 例如:若輸入 JAR 檔案僅由 1.5(或更低)類別檔案組成,則產生一個 1.5 相容的包檔。 這對於沒有類別檔案的檔案庫也會適用。 如果輸入的 JAR 檔案包含 1.6 類別檔案,則 pack 檔版本會設定為 1.6。
注意:除非另有說明,將參數傳遞 null 給本類別的建構子或方法會導致拋出 a NullPointerException 。
已在1.5中新增。
的 java.util.jar.Pack200.PackerJava 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
欄位
| 名稱 | Description |
|---|---|
| ClassAttributePfx |
當與類別屬性名稱串接時,表示該屬性的格式,並依據 JSR 200 規範的版面語言。 |
| CodeAttributePfx |
當與代碼屬性名稱串接時,表示該屬性的格式。 |
| DeflateHint |
若此屬性設為 |
| Effort |
若此屬性設為單一小數,封包器將使用指定的工作量來壓縮壓縮檔案。 |
| Error |
字串「error」,是某些屬性的可能值。 |
| False |
字串「false」,是某些屬性的可能值。 |
| FieldAttributePfx |
當與欄位屬性名稱串接時,表示該屬性的格式。 |
| Keep |
字串「keep」是某些屬性的可能值。 |
| KeepFileOrder |
若此屬性設為 |
| Latest |
字串「最新」,是某些性質的可能值。 |
| MethodAttributePfx |
當與方法屬性名稱串接時,表示該屬性的格式。 |
| ModificationTime |
若此屬性設定為特殊字串 |
| Pass |
字串「pass」是某些性質的可能值。 |
| PassFilePfx |
表示檔案應按位元組順序傳遞,且不壓縮。 |
| Progress |
拆包者的進度以百分比計算,並由拆包者定期更新。 |
| SegmentLimit |
此屬性為數字,表示每個歸檔區段的估計目標大小 N(以位元組為單位)。 |
| Strip |
字串「strip」,是某些性質的可能值。 |
| True |
字串「true」,是某些屬性可能的值。 |
| UnknownAttribute |
當遇到包含未知屬性的類別檔案時,表示應採取的動作。 |
屬性
| 名稱 | Description |
|---|---|
| Handle |
取得底層 Android 物件的 JNI 值。 (繼承來源 IJavaObject) |
| JniIdentityHashCode |
回傳包裹實例的 |
| JniManagedPeerState |
管理貴族的狀況。 (繼承來源 IJavaPeerable) |
| JniObjectReferenceControlBlock |
封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 zip 高度壓縮。 (繼承來源 IJavaPeerable) |
| JniPeerMembers |
成員存取與召喚支援。 (繼承來源 IJavaPeerable) |
| PeerReference |
回傳JniObjectReference包裹後的 Java 物件實例。 (繼承來源 IJavaPeerable) |
方法
| 名稱 | Description |
|---|---|
| AddPropertyChangeListener(IPropertyChangeListener) |
在屬性地圖上註冊一個監聽器,以接收 PropertyChange 事件。 |
| Disposed() |
當實例被處理後才被召喚。 (繼承來源 IJavaPeerable) |
| DisposeUnlessReferenced() |
如果沒有未解決的參考資料,則 |
| Finalized() |
當實例完成後才會被通知。 (繼承來源 IJavaPeerable) |
| Pack(JarFile, Stream) |
會把 JarFile 轉換成 Pack200 檔案庫。 |
| Pack(JarInputStream, Stream) |
會把 JarInputStream 轉換成 Pack200 壓縮檔。 |
| Properties() |
取得這台引擎的屬性集合。 |
| RemovePropertyChangeListener(IPropertyChangeListener) |
移除 PropertyChange 事件的監聽器,該事件由 |
| SetJniIdentityHashCode(Int32) |
將回傳的值設為 |
| SetJniManagedPeerState(JniManagedPeerStates) |
封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 zip 高度壓縮。 (繼承來源 IJavaPeerable) |
| SetPeerReference(JniObjectReference) |
將回傳的值設為 |
| UnregisterFromRuntime() |
取消註冊此實例,讓執行時不會在未來 Java.Interop.JniRuntime+JniValueManager.PeekValue 的呼叫中回傳該實例。 (繼承來源 IJavaPeerable) |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 zip 高度壓縮。 |
| PackAsync(Pack200+IPacker, JarFile, Stream) |
封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 zip 高度壓縮。 |
| PackAsync(Pack200+IPacker, JarInputStream, Stream) |
封包器引擎會對輸入 JAR 檔案進行各種轉換,使 pack 串流能被壓縮器如 gzip 或 zip 高度壓縮。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |