XZ 存檔格式
XZ 是一種高壓縮存檔格式,主要用於壓縮單一文件,提供卓越的壓縮效率和開源相容性。該格式作為 XZ Utils 的一部分開發,因其使用 LZMA2 壓縮演算法而聞名,該演算法可實現高壓縮比,同時保持合理的解壓縮速度。 XZ檔案廣泛應用於軟體包的分發中,特別是在Linux等類Unix作業系統中。
一般 XZ 檔案資訊
XZ 檔案 旨在提供高效壓縮,重點是減少儲存和分發的檔案大小。此格式採用LZMA2演算法,結合了字典壓縮和熵編碼,使其對於壓縮大檔案非常有效。 XZ 檔案通常包含單一壓縮文件,但它們可以與 tar 等其他工具結合使用來壓縮整個目錄。 XZ格式經常用於軟體分發、資料備份和歸檔,特別是在Linux生態系統中,它已成為打包軟體和系統更新的標準。
XZ歷史資訊
- 2005 年:XZ 格式作為 XZ Utils 專案的一部分開始開發,該專案旨在創建較舊的 LZMA 格式的更高效的後繼者。
- 2009年:XZ Utils正式發布,引進XZ格式作為高壓縮需求的新標準。
- 2010 年:XZ 開始在 Linux 社群中流行,迅速成為壓縮軟體套件和系統檔案的首選格式。
- 2011 年:主要 Linux 發行版,包括 Debian 和 Arch Linux,開始採用 XZ 作為其軟體包儲存庫的預設壓縮格式。
- 2014 年:XZ 的用途擴展到 Linux 之外,在跨平台軟體分發中變得流行,特別是對於需要高壓縮比的應用程式。
- 2020 年:XZ 仍然廣泛用於軟體打包、資料儲存和分發,特別是在高效壓縮至關重要的環境中。
XZ檔案的結構
XZ 存檔格式專為單一檔案壓縮而設計,並使用簡單的結構來實現高壓縮比。以下是 XZ 檔案結構的概述:
- 標頭:標頭包含有關 XZ 存檔的元數據,包括格式版本、標誌和使用的任何可選擴充。它還表明存在資料完整性校驗和。
- 壓縮資料流:XZ存檔的核心是壓縮資料流。此部分包含使用 LZMA2 演算法壓縮的實際檔案資料。資料流被分成區塊,允許高效率的壓縮和解壓縮。每個區塊都可以獨立解壓縮,即使存檔部分損壞也有助於恢復資料。
- 頁尾:頁尾包含一個 CRC32 校驗和,用於驗證存檔的完整性。它還標記壓縮資料流的結尾,並且可以包含附加信息,例如用於快速存取的區塊索引。
XZ 壓縮方法
XZ格式主要依賴LZMA2壓縮演算法,該演算法以其高壓縮比和合理的解壓速度而聞名。以下詳細介紹一下與 XZ 相關的壓縮方法:
- LZMA2:這是 XZ 檔案預設且唯一使用的壓縮方法。 LZMA2 基於 LZ77 演算法構建,並結合了先進的熵編碼,使其能夠高效地壓縮大檔案。它提供可調節的壓縮設置,允許用戶根據自己的需求優先考慮壓縮速度或比率。
- 過濾器:除了 LZMA2 之外,XZ還支援各種可選過濾器,可以在壓縮之前應用這些過濾器以進一步減小檔案大小。其中包括增量編碼(對於壓縮具有小而重複變化的資料非常有用)和 BCJ(分支/呼叫/跳躍),它透過將某些指令轉換為更可壓縮的形式來優化可執行程式碼的壓縮。
- CRC32 和SHA-256 校驗和:雖然本身不是壓縮方法,但XZ 檔案使用CRC32 校驗和進行完整性檢查,並可選擇支援SHA-256 來增強資料驗證,確保壓縮資料沒有被損壞或篡改。
.xz 支援的操作
Aspose.Zip 為處理 .xz 檔案提供全面支持,使管理壓縮檔案變得更加容易。您可以執行以下操作:
- 完整提取: 輕鬆從 .xz 檔案中提取所有文件,保留原始內容的完整性和結構。
- 選擇性提取: 以 .xz 檔案中的特定檔案為目標,允許根據檔案名稱或其他標準進行精確的資料復原或選擇性解壓縮。
- 資料壓縮: 從檔案和目錄建立 .xz 存檔,利用高效的 LZMA2 壓縮方法顯著減少檔案大小。
- 自訂壓縮設定: 調整壓縮等級和其他參數以平衡壓縮速度和檔案大小,根據您的特定需求自訂流程。
.XZ 檔案的結構
.xz 檔案格式主要用於資料的壓縮和打包。它採用LZMA2演算法來實現高壓縮比。以下是 .xz 存檔結構的概述:
流標頭:
- Magic Bytes:前 6 個位元組 (FD 37 7A 58 5A 00) 將檔案標識為 .xz 存檔。
- 流標誌:包括區塊大小和壓縮選項等詳細資訊。
區塊頭:
- 區塊大小:指示後續區塊的大小。
- 壓縮方法:指定使用的演算法(通常是 LZMA2)。
- 過濾器鏈:詳細說明壓縮之前或之後所應用的任何其他過濾器。
壓縮資料塊:
- 數據:使用LZMA2演算法壓縮的實際數據。
- CRC32:用於驗證壓縮資料完整性的校驗和。
索引部分:
- 索引資料:提供每個區塊的偏移量和未壓縮的大小,允許在壓縮流內進行隨機存取。
- 索引 CRC32:確保索引部分的完整性。
串流頁尾:
- 流標誌:重複標頭中的流標誌以進行驗證。
- 向後大小:索引部分的大小,啟用檔案的反向遍歷。
- Magic Bytes:檔案以 2 位元組序列 (59 5A) 結尾,表示 .xz 檔案的結束。
可選元資料:
- 某些 .xz 存檔可能包含用於特殊功能或擴充功能的附加元數據,例如自訂篩選器或加密。
XZ 格式的流行
.xz 檔案格式由於其高壓縮比和資源的高效利用而受到廣泛歡迎,特別是在 Linux 和開源社群中。它廣泛用於壓縮軟體包、分發原始碼和歸檔大型資料集。 XZ Utils 工具集為跨各種平台(包括 Linux、macOS 和 Windows)建立、提取和管理 .xz 檔案提供強大支援。儘管在 Windows 環境中沒有像 ZIP 或 CAB 那樣廣泛採用,但 .xz 因其壓縮效果和效能之間的平衡而受到讚賞,使其成為開發人員和系統管理員的首選。此外,.xz 還整合到許多套件管理系統中,例如 Debian 的 APT 和 Arch Linux 的 Pacman,進一步鞏固了其在軟體分發生態系統中的作用。
使用 XZ 檔案的範例
本節提供程式碼範例,示範如何使用 C# 和 Java 壓縮和解壓縮 XZ 檔案。這些範例利用 Aspose.Zip for C# 等函式庫和內建 XzArchive 類別(取決於 Java 環境)與 XZ 檔案進行互動。
Compress XZ File via C#
using (FileStream xzFile = File.Open("data.bin.xz", FileMode.Create))
{
using (FileStream source = File.Open("data.bin", FileMode.Open, FileAccess.Read))
{
using (var archive = new XzArchive(Aspose.Zip.Xz.Settings.XzArchiveSettings.FastestSpeed))
{
archive.SetSource(source);
archive.Save(xzFile);
}
}
}
Open XZ Archive via C#
using (var archive = new XzArchive("data.bin.xz"))
{
archive.Extract("data.bin");
}
Compress XZ File via C#
try (FileOutputStream xzFile = new FileOutputStream("data.bin.xz")) {
try (FileInputStream source = new FileInputStream("data.bin")) {
try (XzArchive archive = new XzArchive(XzArchiveSettings.getFastestSpeed())) {
archive.setSource(source);
archive.save(xzFile);
}
}
} catch (IOException ex) {
}
Open XZ Archive via Java
try (XzArchive archive = new XzArchive("data.bin.xz")) {
archive.extract("data.bin");
}
附加資訊
人們一直在問
1. 所有作業系統都支援 .xz 嗎?
雖然 .xz 最常用於 Linux 環境,但所有主要作業系統都支援它。 XZ Utils 等工具可用於 Windows 和 macOS,並且 7-Zip 等跨平台工具也支援.xz文件。
2. 使用 XZ 檔案有哪些優點?
XZ 檔案具有多種優點,包括高壓縮比、有效利用系統資源以及跨平台相容性。它們通常用於歸檔大型資料集、分發軟體包和備份資料。
3. 我可以將多個檔案壓縮到一個 .xz 檔案中嗎?
與 ZIP 或 [TAR](/zip/zh-hant/most -common -archives/what-is-tar/),.xz 通常用於壓縮單一檔案。如果要壓縮多個文件,首先需要將它們存檔到單一文件中(使用 Aspose.Zip API 來 建立 .tar 檔案 ),然後使用.xz 壓縮存檔,產生.tar.xz 檔案。