- org.apache.commons.compress">org.apache.commons.compress
- org.apache.commons.compress.archivers.zip">org.apache.commons.compress.archivers.zip
- CharsetAccessor
- ExtraFieldParsingBehavior
- UnixStat
- UnparseableExtraFieldBehavior
- ZipArchiveEntryPredicate
- ZipArchiveEntryRequestSupplier
- ZipEncoding
- ZipExtraField
- AbstractUnicodeExtraField
- AsiExtraField
- ExtraFieldUtils
- GeneralPurposeBit
- JarMarker
- ParallelScatterZipCreator
- PKWareExtraHeader
- ResourceAlignmentExtraField
- ScatterStatistics
- ScatterZipOutputStream
- StreamCompressor
- UnicodeCommentExtraField
- UnicodePathExtraField
- UnparseableExtraFieldData
- X000A_NTFS
- X0014_X509Certificates
- X0015_CertificateIdForFile
- X0016_CertificateIdForCentralDirectory
- X0017_StrongEncryptionHeader
- X0019_EncryptionRecipientCertificateList
- X5455_ExtendedTimestamp
- X7875_NewUnix
- Zip64ExtendedInformationExtraField
- ZipArchiveEntry
- ZipArchiveEntryRequest
- ZipArchiveInputStream
- ZipArchiveOutputStream
- ZipArchiveOutputStream.UnicodeExtraFieldPolicy
- ZipEightByteInteger
- ZipEncodingHelper
- ZipFile
- ZipLong
- ZipShort
- ZipSplitReadOnlySeekableByteChannel
- ZipUtil
- PKWareExtraHeader.EncryptionAlgorithm
- PKWareExtraHeader.HashAlgorithm
- Zip64Mode
- ZipArchiveEntry.CommentSource
- ZipArchiveEntry.ExtraFieldParsingMode
- ZipArchiveEntry.NameSource
- ZipMethod
- org.apache.commons.compress.compressors">org.apache.commons.compress.compressors
- org.apache.commons.compress.compressors.gzip">org.apache.commons.compress.compressors.gzip
- org.apache.commons.compress.compressors.gzip">org.apache.commons.compress.compressors.gzip
- org.apache.commons.compress.java.util.jar">org.apache.commons.compress.java.util.jar
- org.apache.commons.compress.parallel">org.apache.commons.compress.parallel
- org.apache.commons.compress.utils">org.apache.commons.compress.utils
- ArchiveUtils
- BitInputStream
- BoundedArchiveInputStream
- BoundedInputStream
- BoundedSeekableByteChannelInputStream
- ByteUtils
- CharsetNames
- Charsets
- ChecksumCalculatingInputStream
- ChecksumVerifyingInputStream
- CloseShieldFilterInputStream
- CountingInputStream
- CountingOutputStream
- CRC32VerifyingInputStream
- FileNameUtils
- FixedLengthBlockOutputStream
- FlushShieldFilterOutputStream
- IOUtils
- Lists
- MultiReadOnlySeekableByteChannel
- OsgiUtils
- SeekableInMemoryByteChannel
- ServiceLoaderIterator
- Sets
- SkipShieldingInputStream
org.apache.commons.compress
ArchiveEntry
表示存档中的一个条目
Modifier and Type | Method and Description |
---|---|
Date | getLastModifiedDate() 获取该条目的最后一次修改时间 |
String | getName() 获取在归档中的该条目的名称 |
long | getSize() 获取该条目解压后的大小,如果大小位置则返回-1 |
boolean | isDirectory() 如果该条目表示一个目录则返回true |
ArchiveStreamProvider
创建归档 ArchiveInputStreams 和 ArchiveOutputStreams。
Modifier and Type | Method and Description |
---|---|
ArchiveInputStream | createArchiveInputStream(String name, InputStream in, String encoding) 通过归档名称和输入流创建一个归档输入流 |
ArchiveOutputStream | createArchiveOutputStream(String name, OutputStream out, String encoding) 通过归档名称和输出流创建一个归档输出流 |
Set[String](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true) | getInputStreamArchiveNames() 获取此 provider 的所有输入流存档名称 |
Set[String](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true) | getOutputStreamArchiveNames() 获取此 provider 的所有输出流存档名称 |
createArchiveInputStream
ArchiveInputStream createArchiveInputStream(String name, InputStream in, String encoding) throws ArchiveException
通过归档名称和输入流创建一个归档输入流
Parameters:
name - 归档名称,例如 ar, arj,zip,tar,jar,cpio,dump,7z
in - 输入流
enconding - 编码名称,默认为 null
createArchiveOutputStream
ArchiveOutputStream createArchiveOutputStream(String name, OutputStream out, String encoding) throws ArchiveException
通过归档名称和输出流创建一个归档输出流
Parameters:
name - 归档名称,例如 ar,zip,tar,jar,cpio
out - 输出流
enconding - 编码名称,默认为 null
EntryStreamOffsets
提供关于 ArchiveEntry 流偏移量的信息
Modifier and Type | Method and Description |
---|---|
long | getDataOffset() 获取该数据流在归档文件中的偏移量 |
boolean | isStreamContiguous() 指示该流是否连续 |
ArchiveInputStream
ArchiveInputStream 必须重写 InputStream.read(byte[], int, int)
或者 read()
方法,以便从流中读取每个条目中的数据末尾以及文件末尾生成的 EOF 。
getNextEntry()
用于重置输入流,以便从下一个条目中读取数据。
输入流类还必须实现一个带有签名的方法:
public static boolean matches(byte[] signature, int length)
ArchiveStreamFactory
使用它从流的前几个字节中自动检测归档类型。
Modifier and Type | Method and Description |
---|---|
boolean | canReadEntryData(ArchiveEntry archiveEntry) 此流是否能够读取给定条目 |
protected void | count(int read) 增加已读取字节的计数器 |
protected void | count(long read) 增加已读取字节的计数器。 |
long | getBytesRead() 从当前流中返回已读取字节数量 |
int | getCount() Deprecated. 对于大的归档文件,此方法可能会产生错误的结果,请改用 #getBytesRead |
abstract ArchiveEntry | getNextEntry() 返回流中的下一个条目 |
protected void | pushedBackBytes(long pushedBack) 减少已读取字节的计数器 |
int | read() 读取一个字节的数据。该方法将阻塞知道该输入流可用。 |
ArchiveOutputStream
ArchiveOutputStream 需要重写 OutputStream.write(byte[], int, int)
以提升性能。还应该重写 OutputStream.close()
。使用 ArchiveOutputStreams 时的正常调用顺序是:
- 创建 ArchiveOutputStream 对象
- 可选择写入 SFX 标头(仅限 Zip)
- 根据需要重复:
- putArchiveEntry(ArchiveEntry) (写入条目标题)
- OutputStream.write(byte[]) (写入条目数据)
- closeArchiveEntry() (关闭条目)
- finish() (结束添加条目)
- 可选地写入附加数据,只要格式支持此操作
Modifier and Type | Method and Description |
---|---|
boolean | canWriteEntryData(ArchiveEntry archiveEntry) 此流是否能够写入给定条目 |
abstract void | closeArchiveEntry() 关闭存档条目,写入可能需要的任何预告片信息 |
protected void | count(int written) 增加已写入字节的计数器 |
protected void | count(long written) 增加已写入字节的计数器 |
abstract ArchiveEntry | createArchiveEntry(File inputFile, String entryName) 使用提供的 inputFile 和 entryName 创建存档条目 |
ArchiveEntry | createArchiveEntry(Path inputPath, String entryName, LinkOption… options) 使用提供的 inputPath 和 entryName 创建存档条目 |
abstract void | finish() 完成向该流添加条目,但是不关闭它。如果格式支持,可以写入其他数据 |
long | getBytesWritten() 从当前流中返回已写入字节数量 |
int | getCount() Deprecated. 对于大的归档文件,此方法可能会产生错误的结果,请改用 #getBytesWritten |
abstract void | putArchiveEntry(ArchiveEntry entry) 将归档条目的头部写入输出流。然后调用者必须将内容写入流并调用 closeArchiveEntry() 以完成该过程 |
void | write(int b) 将一个字节写入当前存档条目 |
ArchiveStreamFactory
通过名称或 InputStream 的第一个字节创建 Archive[In|Out]putStreams 的工厂类。如果需要别的实现类,需要继承 ArchiveStreamFactory 并重写适当的方法(当然还要从 super 调用它们的实现)。
压缩 ZIP 文件:
// 打开或创建文件,返回一个用于向文件写入bytes的输入流
final OutputStream out = Files.newOutputStream(output.toPath());
ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, out);
os.putArchiveEntry(new ZipArchiveEntry("testdata/test1.xml"));
IOUtils.copy(Files.newInputStream(file1.toPath()), os);
os.closeArchiveEntry();
os.putArchiveEntry(new ZipArchiveEntry("testdata/test2.xml"));
IOUtils.copy(Files.newInputStream(file2.toPath()), os);
os.closeArchiveEntry();
os.close();
解压缩 ZIP 文件:
// 打开一个文件,返回一个输出流用来读取文件
final InputStream is = Files.newInputStream(input.toPath());
ArchiveInputStream in = new ArchiveStreamFactory().createArchiveInputStream(ArchiveStreamFactory.ZIP, is);
ZipArchiveEntry entry = (ZipArchiveEntry)in.getNextEntry();
OutputStream out = Files.newOutputStream(dir.toPath().resolve(entry.getName()));
IOUtils.copy(in, out);
out.close();
in.close();
该类是不可变的,前提是不使用已废弃的方法 ~~setEntryEncoding~~
这个类是线程安全的,即使使用了已弃用的方法~~setEntryEncoding~~
Fields
Modifier and Type | Field and Description |
---|---|
static String | AR ar 常量,用来定义 AR 归档格式 |
static String | ARJ arj 常量,用来定义 ARJ 归档格式 |
static String | CPIO cpio 常量,用来定义 CPIO 归档格式 |
static ArchiveStreamFactory | DEFAULT The singleton instance using the platform default encoding. |
static String | DUMP dump 常量,用来定义 DUMP 归档格式 |
static String | JAR jar 常量,用来定义 JAR 归档格式 |
static String | SEVEN_Z 7z 常量,用来定义 7z 归档格式 |
static String | TAR tar 常量,用来定义 TAR 归档格式 |
static String | ZIP zip 常量,用来定义 ZIP 归档格式 |
Methods
createArchiveInputStream
public ArchiveInputStream createArchiveInputStream(String archiverName, InputStream in) throws ArchiveException
根据归档名称和给定的输入流创建一个归档输入流
Parameters:
archiverName - the archive name, i.e. “ar”, “arj”, “zip”, “tar”, “jar”, “cpio”, “dump” or “7z”
in - the input stream
createArchiveOutputStream
public ArchiveOutputStream createArchiveOutputStream(String archiverName, OutputStream out) throws ArchiveException
根据归档名称和给定的输出流创建一个归档输出流
Parameters:
archiverName - the archive name, i.e. “ar”, “zip”, “tar”, “jar” or “cpio”
out - the output stream
Lister
列出归档文件内容的简单命令行应用程序。
归档的名称必须作为命令行参数给出。
可选的第二个参数定义归档类型,以防格式无法识别。
org.apache.commons.compress.archivers.zip
CharsetAccessor
添加一个接口以允许访问与 NioZipEncoding 关联的字符集,而无需将新方法添加到 ZipEncoding。
这避免了引入潜在的破坏性更改,或使 NioZipEncoding 成为公共类。
Modifier and Type | Method and Description |
---|---|
Charset | getCharset() 提供对与对象关联的字符集的访问。这允许面向 nio 的代码使用更自然的字符编码/解码方法,同时允许现有代码继续依赖 UTF-8 的特殊情况错误处理 |
ExtraFieldParsingBehavior
解析 zip 额外字段的控制细节
Modifier and Type | Method and Description |
---|---|
ZipExtraField | createExtraField(ZipShort headerId) 通过给定的 id 创建一个 ZipExtraField 实例。 ExtraFieldUtils.createExtraField(org.apache.commons.compress.archivers.zip.ZipShort)就是一个很好的默认实现 |
ZipExtraField | fill(ZipExtraField field, byte[] data, int off, int len, boolean local) 填写单个额外字段的额外字段数据 |
fill
ZipExtraField fill(ZipExtraField field, byte[] data, int off, int len, boolean local) throws ZipException
填写单个额外字段的额外字段数据
Parameters:
field - 需要取填充的额外字段
data - 额外字段数据数组
off - 距离开始位置的偏移量
len - 字段数据的长度
local - 额外的字段数据是否来自本地文件头。 如果为 false,那么数据是中央目录标题额外数据的一部分
return:
填充的字段。 通常这与字段相同,但它也可以是替换的额外字段。 不得为空。
UnixStat
Unix 系统的 stat.h 文件中的常量
Modifier and Type | Field and Description |
---|---|
static int | DEFAULT_DIR_PERM 目录的默认权限 |
static int | DEFAULT_FILE_PERM 明文文件的默认权限 |
static int | DEFAULT_LINK_PERM 符号链接的默认权限。 |
static int | DIR_FLAG 目录标识 |
static int | FILE_FLAG 明文文件标识 |
static int | FILE_TYPE_FLAG Bits,用来指示文件系统对象类型 |
static int | LINK_FLAG 指示符号链接 |
static int | PERM_MASK Bits,用于权限(和粘性位) |
UnparseableExtraFieldBehavior
处理不遵循带有两字节 key 和两字节长度的额外字段的推荐模式的额外字段数据。
Modifier and Type | Method and Description |
---|---|
ZipExtraField | onUnparseableExtraField(byte[] data, int off, int len, boolean local, int claimedLength) 决定如何处理不遵循推荐模式的额外字段数据 |
onUnparseableExtraField
ZipExtraField onUnparseableExtraField(byte[] data, int off, int len, boolean local, int claimedLength) throws ZipException
决定如何处理不遵循推荐模式的额外字段数据
Parameters:
data - 额外字段数据的数组
off - 偏移到不可解析数据开始的数据中
len - 不可解析数据的长度
local - 额外字段数据是否来自本地文件头。 如果为 false,那么数据是中央目录标题额外数据的一部分
claimLength - 第三个和第四个字节声明的额外字段的长度,如果它确实遵循推荐的模式
Return:
如果应忽略数据或额外字段实现表示了该数据,则为 null
ZipArchiveEntryPredicate
用于测试 #ZipArchiveEntry 是否与条件匹配的谓词。 可能支持继承 java.util.function.Predicate
Modifier and Type | Method and Description |
---|---|
boolean | test(ZipArchiveEntry zipArchiveEntry) 指示给定条目是否应包含在操作中 |
ZipArchiveEntryRequestSupplier
提供 ZipArchiveEntryRequest。实现类需要支持线程切换。 虽然一个实例不会被多个线程同时访问,但它将由与创建它的线程不同的线程调用。
Modifier and Type | Method and Description |
---|---|
ZipArchiveEntryRequest | get() 提供要添加到并行归档中的 ZipArchiveEntryRequest |
ZipEncoding
对 ZIP 文件名进行优雅编码的编码器接口。主要有两种实现,一种使用 java.nio 字符集,另一种处理简单的 8 位字符集,因为 java-1.4 在 java.nio 中不支持 Cp437。
定义自己的编码层的主要原因来自 String.getBytes 的问题,它将未知字符编码为 ASCII 引号 (‘?’)。 引号在某些操作系统(如 Windows)上根据定义是无效的文件名,这会导致 ZIP 条目被忽略。
所有的实现类都应该以可重入的方式实现这个接口。
Modifier and Type | Method and Description |
---|---|
boolean | canEncode(String name) 检查给定的字符串是否可以使用此编码进行无损编码 |
String | decode(byte[] data) |
ByteBuffer | encode(String name) 将文件名或注释编码为适合将其存储到序列化 zip 条目的字节数组 |
encode
ByteBuffer encode(String name) throws IOException
将文件名或注释编码为适合将其存储到序列化 zip 条目的字节数组。CP437 的示例(在伪符号中,右侧是 C 样式符号):
encode("?_for_Dollar.txt") = "%U20AC_for_Dollar.txt"
encode("Ölfässer.txt") = "\231lf\204sser.txt"
Parameters:
name - 文件名或 ZIP 注释。
Return:
带有包含编码名称的后备数组的字节缓冲区。 无法映射的字符或格式错误的字符序列被映射到以 %Uxxxx 格式编码的 utf-16 字序列。 假设字节缓冲区位于编码结果的开头,字节缓冲区有一个后备数组,字节缓冲区的限制指向编码结果的末尾。
ZipExtraField
额外字段数据的通用格式
额外字段通常在每个文件中出现两次,一次在本地文件数据中,一次在中央目录中。 通常它们是相同的,但它们不必相同。 java.util.zip.ZipOutputStream 只会在两个地方使用本地文件数据。
Fields
Modifier and Type | Field and Description |
---|---|
static int | EXTRAFIELD_HEADER_SIZE 额外字段在字段头部大小(id + length) |
Methods
Modifier and Type | Method and Description |
---|---|
byte[] | getCentralDirectoryData() 放入中央目录的实际数据 - 没有 Header-ID 或长度说明符 |
ZipShort | getCentralDirectoryLength() 中央目录中额外字段的长度 - 没有 Header-ID 或长度说明符 |
ZipShort | getHeaderId() The Header-ID. |
byte[] | getLocalFileDataData() 放入本地文件的实际数据 - 没有 Header-ID 或长度说明符 |
ZipShort | getLocalFileDataLength() 本地文件数据中额外字段的长度 - 没有 Header-ID 或长度说明符 |
void | parseFromCentralDirectoryData(byte[] buffer, int offset, int length) 从此数组中填充数据,就好像它在中央目录数据中一样 |
void | parseFromLocalFileData(byte[] buffer, int offset, int length) 从此数组中填充数据,就好像它在本地文件数据中一样 |
AbstractUnicodeExtraField
ZipExtraField的直接子类。Unicode 额外信息额外字段的通用基类。
Modifier and Type | Method and Description |
---|---|
byte[] | getCentralDirectoryData() 放入中央目录的实际数据 - 没有 Header-ID 或长度说明符 |
ZipShort | getCentralDirectoryLength() 中央目录中额外字段的长度 - 没有 Header-ID 或长度说明符 |
byte[] | getLocalFileDataData() 放入本地文件的实际数据 - 没有 Header-ID 或长度说明符 |
ZipShort | getLocalFileDataLength() 本地文件数据中额外字段的长度 - 没有 Header-ID 或长度说明符 |
long | getNameCRC32() |
byte[] | getUnicodeName() |
void | parseFromCentralDirectoryData(byte[] buffer, int offset, int length) 没有做任何特别的事情,因为这个类总是在中央目录和本地文件数据中使用相同的数据 |
void | parseFromLocalFileData(byte[] buffer, int offset, int length) 从此数组中填充数据,就好像它在本地文件数据中一样 |
void | setNameCRC32 (long nameCRC32) |
void | setUnicodeName (byte[] unicodeName) |
AsiExtraField
public class AsiExtraField extends Object
implements ZipExtraField, UnixStat, Cloneable
添加 Unix 文件权限和 UID/GID 字段以及符号链接处理。
此类使用以下格式的 ASi 额外字段:
Value Size Description
----- ---- -----------
(Unix3) 0x756e Short tag for this extra block type
TSize Short total data size for this block
CRC Long CRC-32 of the remaining data
Mode Short file permissions
SizDev Long symlink'd size OR major/minor dev num
UID Short user ID
GID Short group ID
(var.) variable symbolic link file name
取自 ftp://ftp.uu.net/pub/archiving/zip/doc/ 上的 appnote.iz (Info-ZIP note, 981119)
Short 是两个字节,Long 是大端字节序的四个字节,目前不支持设备号。
这个类不是线程安全的。由于该类所基于的文档根本没有提及文件名的字符编码,因此假定它使用当前平台的默认编码。
Modifier and Type | Method and Description |
---|---|
Object | clone() |
byte[] | getCentralDirectoryData() 委托给本地文件数据 |
ZipShort | getCentralDirectoryLength() 委托给本地文件数据 |
int | getGroupId() |
ZipShort | getHeaderId() |
String | getLinkedFile() 链接文件名称 |
byte[] | getLocalFileDataData() The actual data to put into local file data - without Header-ID or length specifier. |
ZipShort | getLocalFileDataLength() Length of the extra field in the local file data - without Header-ID or length specifier. |
int | getMode() |
protected int | getMode(int mode) 使用正确的文件类型获取给定权限的文件模式 |
int | getUserId() |
boolean | isDirectory() |
boolean | isLink() |
void | parseFromCentralDirectoryData(byte[] buffer, int offset, int length) 没有做任何特别的事情,因为这个类总是在中央目录和本地文件数据中使用相同的数据 |
void | parseFromLocalFileData(byte[] data, int offset, int length) Populate data from this array as if it was in local file data. |
void | setDirectory(boolean dirFlag) |
void | setGroupId(int gid) |
void | setLinkedFile(String name) |
void | setMode(int mode) |
void | setUserId(int uid) |
ExtraFieldUtils
ZipExtraField 相关方法
Modifier and Type | Method and Description |
---|---|
static ZipExtraField | createExtraField(ZipShort headerId) 创建适当的 ExtraField 的实例,回退到 UnrecognizedExtraField |
static ZipExtraField | createExtraFieldNoDefault(ZipShort headerId) 创建适当的 ExtraField 的实例 |
static ZipExtraField | fillExtraField(ZipExtraField ze, byte[] data, int off, int len, boolean local) 将额外的字段数据填充到给定的实例中 |
static byte[] | mergeCentralDirectoryData(ZipExtraField[] data) 合并给定 ZipExtraFields 的中心目录字段 |
static byte[] | mergeLocalFileDataData(ZipExtraField[] data) 合并给定 ZipExtraFields 的本地文件字段 |
static ZipExtraField[] | parse(byte[] data) 将数组拆分为 ExtraFields 并将给定数据填充为本地文件数据,如果无法解析数据则抛出异常 |
static ZipExtraField[] | parse(byte[] data, boolean local) 将数组拆分为 ExtraFields 并用给定的数据填充它们,如果无法解析数据则抛出异常 |
static ZipExtraField[] | parse(byte[] data, boolean local, ExtraFieldParsingBehavior parsingBehavior) 将数组拆分为 ExtraFields 并用给定的数据填充它们 |
static ZipExtraField[] | parse(byte[] data, boolean local, ExtraFieldUtils.UnparseableExtraField onUnparseableData) 将数组拆分为 ExtraFields 并用给定的数据填充它们 |
static void | register(Class<?> c) 注册 ZipExtraField 实现类 |
GeneralPurposeBit
ZIP 本地文件和中央目录头中“通用位”字段的解析器/编码器
Modifier and Type | Method and Description |
---|---|
Object | clone() |
byte[] | encode() 以适合 ZIP 归档的形式对设置的位进行编码 |
void | encode(byte[] buf, int offset) 以适合 ZIP 归档的形式对设置的位进行编码。 |
boolean | equals(Object o) |
int | hashCode() |
static GeneralPurposeBit | parse(byte[] data, int offset) 从给定的归档数据中解析支持的 flags |
void | useDataDescriptor(boolean b) 当前条目是否会使用数据描述符来存储 CRC 和大小信息 |
void | useEncryption(boolean b) 当前条目是否会被加密 |
boolean | usesDataDescriptor() 当前条目是否会使用数据描述符来存储 CRC 和大小信息。 |
boolean | usesEncryption() 当前条目是否会被加密 |
boolean | usesStrongEncryption() 当前条目是否使用强加密进行加密 |
void | useStrongEncryption(boolean b) 当前条目是否使用强加密进行加密 |
boolean | usesUTF8ForNames() 当前条目是否使用 UTF8 作为文件名和注释 |
void | useUTF8ForNames(boolean b) 当前条目是否使用 UTF8 作为文件名和注释 |
JarMarker
public final class JarMarker extends Object
implements ZipExtraField
如果将此额外字段添加为归档的第一个额外字段,则 Solaris 会将其视为可执行 jar 文件。
Modifier and Type | Method and Description |
---|---|
byte[] | getCentralDirectoryData() |
ZipShort | getCentralDirectoryLength() |
ZipShort | getHeaderId() |
static JarMarker | getInstance() 由于 JarMarker 是无状态的,我们总是可以使用相同的实例 |
byte[] | getLocalFileDataData() |
ZipShort | getLocalFileDataLength() |
void | parseFromCentralDirectoryData(byte[] buffer, int offset, int length) |
void | parseFromLocalFileData(byte[] data, int offset, int length) |
ParallelScatterZipCreator
通过使用多个 ThreadLocal ScatterZipOutputStream 实例并行创建一个 zip。
请注意,在 1.18 之前,此类通常不保证写入输出文件的内容的顺序。 需要按特定顺序(清单、目录)出现的事情必须由此类的客户端处理,通常是在调用此类上的 writeTo 之前将这些事情写入 ZipArchiveOutputStream。
客户端可以提供一个 ExecutorService,但出于内存模型一致性的原因,这将在完成之前被此类关闭。
PKWareExtraHeader
public abstract class PKWareExtraHeader extends Object
implements ZipExtraField
所有 PKWare 强加密额外头部的基类。这个基类充当一个标记,因此如果您对 PKWare 强加密的元数据不感兴趣,您可以忽略所有扩展该类的额外字段。
算法 ID - 来自以下范围的加密算法的整数标识符:
- 0x6601 - DES
- 0x6602 - RC2 (version needed to extract < 5.2)
- 0x6603 - 3DES 168
- 0x6609 - 3DES 112
- 0x660E - AES 128
- 0x660F - AES 192
- 0x6610 - AES 256
- 0x6702 - RC2 (version needed to extract >= 5.2)
- 0x6720 - Blowfish
- 0x6721 - Twofish
- 0x6801 - RC4
- 0xFFFF - Unknown algorithm
哈希算法 - 哈希算法的整数标识符,来自以下范围:
- 0x0000 - none
- 0x0001 - CRC32
- 0x8003 - MD5
- 0x8004 - SHA1
- 0x8007 - RIPEMD160
- 0x800C - SHA256
- 0x800D - SHA384
- 0x800E - SHA512
Modifier and Type | Method and Description |
---|---|
protected void | assertMinimalLength(int minimum, int length) |
byte[] | getCentralDirectoryData() |
ZipShort | getCentralDirectoryLength() |
ZipShort | getHeaderId() |
byte[] | getLocalFileDataData() |
ZipShort | getLocalFileDataLength() |
void | parseFromCentralDirectoryData(byte[] data, int offset, int length) |
void | parseFromLocalFileData(byte[] data, int offset, int length) |
void | setCentralDirectoryData(byte[] data) |
void | setLocalFileDataData(byte[] data) |
ResourceAlignmentExtraField
public abstract class PKWareExtraHeader extends Object
implements ZipExtraField
一个额外的字段,其唯一目的是对齐和填充本地文件头,以便条目的数据从某个位置开始。
读取填充字段时,填充的填充内容将被忽略且不保留。
这使 Commons Compress 能够创建类似于 Android 的 zipalign 命令行工具的“对齐”归档。
Modifier and Type | Method and Description |
---|---|
boolean | allowMethodChange() 指示重新压缩 zip 文件时是否允许更改方法 |
short | getAlignment() 获取请求的对齐方式 |
byte[] | getCentralDirectoryData() |
ZipShort | getCentralDirectoryLength() |
ZipShort | getHeaderId() |
byte[] | getLocalFileDataData() |
ZipShort | getLocalFileDataLength() |
void | parseFromCentralDirectoryData(byte[] buffer, int offset, int length) |
void | parseFromLocalFileData(byte[] buffer, int offset, int length) |
ScatterStatistics
提供有关分散压缩运行的信息。
Modifier and Type | Method and Description |
---|---|
long | getCompressionElapsed() 并行压缩阶段经过的毫秒数 |
long | getMergingElapsed() 合并并行压缩的结果经过的毫秒数,IO阶段 |
ScatterZipOutputStream
一个 zip 输出流,针对 zip 文件的多线程分散/聚集构造进行了优化。此类使用的条目的内部数据格式对此类完全私有,并且不属于任何公共 api。
可以继承此类以支持不同类型的后备存储,默认实现仅支持基于文件的后备。
线程安全:这个类支持多线程。 但是“writeTo”方法必须由最初创建 ZipArchiveEntry 的线程调用。
Modifier and Type | Method and Description |
---|---|
void | addArchiveEntry(ZipArchiveEntryRequest zipArchiveEntryRequest) 将存档条目添加到此分散流 |
void | close() |
static ScatterZipOutputStream | fileBased(File file) 使用文件支持的默认压缩级别创建 ScatterZipOutputStream |
static ScatterZipOutputStream | fileBased(File file, int compressionLevel) 创建由文件支持的 ScatterZipOutputStream |
void | writeTo(ZipArchiveOutputStream target) 将此分散流的内容写入目标归档 |
ScatterZipOutputStream.ZipEntryWriter | zipEntryWriter() 获取此分散流的 zip 条目编写器 |
StreamCompressor
封装了 Deflater 和 crc 计算器,处理多种类型的输出流。 目前 ZipEntry.DEFLATED 和 ZipEntry.STORED 是唯一支持的压缩方法。
Modifier and Type | Method and Description |
---|---|
void | close() |
static StreamCompressor | create(int compressionLevel, ScatterGatherBackingStore bs) 通过给定的压缩级别创建一个流压缩器 |
static StreamCompressor | create(ScatterGatherBackingStore bs) 通过给定的压缩级别创建一个流压缩器 |
void | deflate(InputStream source, int method) 使用提供的压缩方法对给定的源进行解压 |
long | getBytesRead() 获取从源流中读取的字节数量 |
long | getBytesWrittenForLastEntry() 写入到最后一个条目的输出流的字节数 |
long | getCrc32() 最后一个解压条目的 crc32 |
long | getTotalBytesWritten() 写入到最后一个条目的输出流的字节数 所有文件写入输出流的总字节数 |
void | writeCounted(byte[] data) |
void | writeCounted(byte[] data, int offset, int length) |
protected abstract void | writeOut(byte[] data, int offset, int length) |
UnicodeCommentExtraField
public class UnicodeCommentExtraField extends AbstractUnicodeExtraField
Info-ZIP Unicode 注释额外字段 (0x6375):存储中央目录头部中存储的文件注释的 UTF-8 版本。
非线程安全类,父类也是非线程安全类。
UnicodePathExtraField
public class UnicodePathExtraField
extends AbstractUnicodeExtraField
Info-ZIP Unicode 路径额外字段 (0x6375):存储本地文件头部和中央目录头部中存储的文件名称字段的 UTF-8 版本。
非线程安全类,父类也是非线程安全类。
UnparseableExtraFieldData
public final class UnparseableExtraFieldData extends Object
implements ZipExtraField
不符合推荐的 header-tag + size + data 格式的额外字段数据的包装器。
header-id 是人为的(在 APPNOTE.TXT 中未列为已知 ID)。 由于除了满足 ZipExtraField 约束外,它不会在任何地方使用,因此无论如何都无关紧要。
Modifier and Type | Method and Description |
---|---|
byte[] | getCentralDirectoryData() 要放入中央目录的实际数据 |
ZipShort | getCentralDirectoryLength() 中央目录中完整额外字段的长度 |
ZipShort | getHeaderId() The Header-ID. |
byte[] | getLocalFileDataData() 要放入本地文件数据的实际数据 |
ZipShort | getLocalFileDataLength() 本地文件数据中完整额外字段的长度 |
void | parseFromCentralDirectoryData(byte[] buffer, int offset, int length) 从此数组中填充数据,就好像它在中央目录数据中一样 |
void | parseFromLocalFileData(byte[] buffer, int offset, int length) 从此数组中填充数据,就好像它在本地文件数据中一样 |
X000A_NTFS
public class X000A_NTFS extends Object
implements ZipExtraField
NTFS 额外字段被认为存储各种属性,但实际上只存储时间戳。
4.5.5 -NTFS Extra Field (0x000a):
下面是NTFS属性 “extra” 块的布局。(注:此时Mtime、Atime
和 Ctime 值可以在任何 WIN32 系统上使用。)
Note: all fields stored in Intel low-byte/high-byte order.
注意:所有字段以 Intel 低字节/高字节顺序存储
Value Size Description
----- ---- -----------
(NTFS) 0x000a 2 bytes Tag for this "extra" block type
TSize 2 bytes Size of the total "extra" block
Reserved 4 bytes Reserved for future use
Tag1 2 bytes NTFS attribute tag value #1
Size1 2 bytes Size of attribute #1, in bytes
(var) Size1 Attribute #1 data
.
.
.
TagN 2 bytes NTFS attribute tag value #N
SizeN 2 bytes Size of attribute #N, in bytes
(var) SizeN Attribute #N data
对于 NTFS,Tag1 到 TagN 的值如下:
(目前只为 NTFS 定义了一组属性)
Tag Size Description
----- ---- -----------
0x0001 2 bytes Tag for attribute #1
Size1 2 bytes Size of attribute #1, in bytes
Mtime 8 bytes File last modification time
Atime 8 bytes File last access time
Ctime 8 bytes File creation time
Modifier and Type | Method and Description |
---|---|
boolean | equals(Object o) |
Date | getAccessJavaTime() 以该 zip 条目的 java.util.Date 形式返回访问时间,如果 zip 条目中不存在此类时间戳,则返回 null |
ZipEightByteInteger | getAccessTime() 返回此 zip 条目的“文件上次访问时间”作为 ZipEightByteInteger 对象,如果 zip 条目中不存在此类时间戳,则返回 ZipEightByteInteger.ZERO |
byte[] | getCentralDirectoryData() |
ZipShort | getCentralDirectoryLength() |
Date | getCreateJavaTime() 以 java.util.Date 形式返回此 zip 条目的创建时间,如果 zip 条目中不存在此类时间戳,则返回 null |
ZipEightByteInteger | getCreateTime() 返回此 zip 条目的“文件创建时间”作为 ZipEightByteInteger 对象,如果 zip 条目中不存在此类时间戳,则返回 ZipEightByteInteger.ZERO |
ZipShort | getHeaderId() |
byte[] | getLocalFileDataData() |
ZipShort | getLocalFileDataLength() |
Date | getModifyJavaTime() 以此 zip 条目的 java.util.Date 形式返回修改时间,如果 zip 条目中不存在此类时间戳,则返回 null |
ZipEightByteInteger | getModifyTime() 返回此 zip 条目的“文件上次修改时间”作为 ZipEightByteInteger 对象,如果 zip 条目中不存在此类时间戳,则返回 ZipEightByteInteger.ZERO |
int | hashCode() |
void | parseFromCentralDirectoryData(byte[] buffer, int offset, int length) |
void | parseFromLocalFileData(byte[] data, int offset, int length) |
void | setAccessJavaTime(Date d) |
void | setAccessTime(ZipEightByteInteger t) |
void | setCreateJavaTime(Date d) |
void | setCreateTime(ZipEightByteInteger t) |
void | setModifyJavaTime(Date d) |
void | setModifyTime(ZipEightByteInteger t) |
String | toString() |
X0014_X509Certificates
public class X0014_X509Certificates extends PKWareExtraHeader
PKCS#7 存储 X.509 证书 (0x0014)。
该字段必须包含有关每个可能签名的证书文件的信息。 当 ZIP 文件启用中央目录加密功能时,此记录将出现在归档额外数据记录中,否则它将出现在第一个中央目录记录中,并且在任何其他记录中将被忽略。
注意:所有字段以 Intel 低字节/高字节顺序存储。
Value Size Description
----- ---- -----------
(Store) 0x0014 2 bytes Tag for this "extra" block type
TSize 2 bytes Size of the store data
TData TSize Data about the store
X0015_CertificateIdForFile
public class X0015_CertificateIdForFile extends PKWareExtraHeader
单个文件 (0x0015) 的 X.509 证书 ID 和签名。
此字段包含有关 PKCS#7 存储中的哪个证书用于签署特定文件的信息。 它还包含签名数据。 此字段可以出现多次,但每个证书只能出现一次。
注意:所有字段以 Intel 低字节/高字节顺序存储。
Value Size Description
----- ---- -----------
(CID) 0x0015 2 bytes Tag for this "extra" block type
TSize 2 bytes Size of data that follows
RCount 4 bytes Number of recipients. (inferred)
HashAlg 2 bytes Hash algorithm identifier. (inferred)
TData TSize Signature Data
X0016_CertificateIdForCentralDirectory
public class X0016_CertificateIdForCentralDirectory extends PKWareExtraHeader
中央目录 (0x0016) 的 X.509 证书 ID 和签名。
此字段包含有关 PKCS#7 存储中的哪个证书用于签署中央目录结构的信息。 当 ZIP 文件启用中央目录加密功能时,该记录将出现在存档额外数据记录中,否则将出现在第一条中央目录记录中。
注意:所有字段以 Intel 低字节/高字节顺序存储。
Value Size Description
----- ---- -----------
(CDID) 0x0016 2 bytes Tag for this "extra" block type
TSize 2 bytes Size of data that follows
RCount 4 bytes Number of recipients. (inferred)
HashAlg 2 bytes Hash algorithm identifier. (inferred)
TData TSize Data
X0017_StrongEncryptionHeader
public class X0017_StrongEncryptionHeader extends PKWareExtraHeader
强加密头部 (0x0017)。
基于证书的加密:
Value Size Description
----- ---- -----------
0x0017 2 bytes Tag for this "extra" block type
TSize 2 bytes Size of data that follows
Format 2 bytes Format definition for this record
AlgID 2 bytes Encryption algorithm identifier
Bitlen 2 bytes Bit length of encryption key (32-448 bits)
Flags 2 bytes Processing flags
RCount 4 bytes Number of recipients.
HashAlg 2 bytes Hash algorithm identifier
HSize 2 bytes Hash size
SRList (var) Simple list of recipients hashed public keys
Flags
- 0x0007 - 保留供将来使用
- 0x000F - 保留供将来使用
- 0x0100 - 表示使用了非 OAEP 密钥包装。 如果设置了此字段,则需要提取的版本必须至少为 61。这意味着使用 ErdData 生成主会话密钥时不使用 OAEP 密钥包装
- 0x4000 - ErdData 必须使用 3DES-168 解密,否则使用用于加密文件内容的相同算法
- 0x8000 - 保留供将来使用
RCount
定义了预期接收者的数量,其公钥用于加密。 这标识SRList 中的元素数量。
HSize
定义了散列公钥的大小。
SRList
这是散列的可变长度列表每个预期收件人的公钥。 每个此列表中的元素是 HSize。 总规模SRList 使用 RCount * HSize 确定。
仅在中心标头中基于密码的额外字段 0x0017。
Value Size Description
----- ---- -----------
0x0017 2 bytes Tag for this "extra" block type
TSize 2 bytes Size of data that follows
Format 2 bytes Format definition for this record
AlgID 2 bytes Encryption algorithm identifier
Bitlen 2 bytes Bit length of encryption key (32-448 bits)
Flags 2 bytes Processing flags
(more?)
Format
此记录的数据格式标识符。 此时唯一允许的值是整数值 2。
压缩文件数据前基于密码的额外字段 0x0017。
Value Size Description
----- ---- -----------
0x0017 2 bytes Tag for this "extra" block type
IVSize 2 bytes Size of initialization vector (IV)
IVData IVSize Initialization vector for this file
Size 4 bytes Size of remaining decryption header data
Format 2 bytes Format definition for this record
AlgID 2 bytes Encryption algorithm identifier
Bitlen 2 bytes Bit length of encryption key (32-448 bits)
Flags 2 bytes Processing flags
ErdSize 2 bytes Size of Encrypted Random Data
ErdData ErdSize Encrypted Random Data
Reserved1 4 bytes Reserved certificate processing data
Reserved2 (var) Reserved for certificate processing data
VSize 2 bytes Size of password validation data
VData VSize-4 Password validation data
VCRC32 4 bytes Standard ZIP CRC32 of password validation data
IVData
IV 的大小应与算法块大小相匹配。IVData 可以是完全随机的数据。如果随机生成的数据大小与块大小不匹配它应该用零补充或截断。如果 IVSize 为 0,则 IV = CRC32 + 未压缩文件大小(作为 64 位 little-endian,无符号整数值)。
Format
此记录的数据格式标识符。唯一的此时允许的值为整数值 2。
ErdData
用来存储为加密每个文件而生成的文件会话key的随机数据的加密随机数。 SHA1 用于计算哈希数据派生密钥。文件会话密钥是从主服务器派生的从用户提供的密码生成的会话密钥。如果解密头中的 Flags 字段包含值 0x4000,则 ErdData 字段必须是使用 3DES 解密。如果未设置值 0x4000,那么 ErdData 字段必须使用 AlgId 解密。
Reserved1
为证书处理保留,如果值为零,则 Reserved2 数据不存在。看说明根据证书处理方法了解详情这个数据结构。
Reserved2
如果存在,Reserved2 数据结构的大小通过跳过该字段的前 4 个字节来定位并使用接下来的 2 个字节作为剩余大小。看证书处理方法下的解释有关此数据结构的详细信息。
VSize
这个大小值将始终包括 4 个字节VCRC32 数据将大于 4 个字节
VData
用于密码验证的随机数据。这个数据是 VSize长度和 VSize 必须是加密的倍数块大小。 VCRC32 是 VData 的校验和值。VData 和 VCRC32 被加密存储并启动文件的加密数据流。
Reserved1 - 证书解密标头 Reserved1 数据:
Value Size Description
----- ---- -----------
RCount 4 bytes Number of recipients.
RCount - 定义了其公钥用于加密的预期收件人的数量。 这定义了下面定义的 REList 字段中的元素数量。
Reserved2 - 证书解密头 Reserved2 数据结构:
Value Size Description
----- ---- -----------
HashAlg 2 bytes Hash algorithm identifier
HSize 2 bytes Hash size
REList (var) List of recipient data elements
HashAlg - This defines the hash algorithm used to calculate
the public key hash of each public key used
for encryption. This field currently supports
only the following value for SHA-1
0x8004 - SHA1
HSize - This defines the size of a hashed public key
defined in REHData.
REList - This is a variable length of list of recipient data.
Each element in this list consists of a Recipient
Element data structure as follows:
收件人元素 (REList) 数据结构:
Value Size Description
----- ---- -----------
RESize 2 bytes Size of REHData + REKData
REHData HSize Hash of recipients public key
REKData (var) Simple key blob
RESize - This defines the size of an individual REList
element. This value is the combined size of the
REHData field + REKData field. REHData is defined by
HSize. REKData is variable and can be calculated
for each REList element using RESize and HSize.
REHData - Hashed public key for this recipient.
REKData - Simple Key Blob. The format of this data structure
is identical to that defined in the Microsoft
CryptoAPI and generated using the CryptExportKey()
function. The version of the Simple Key Blob
supported at this time is 0x02 as defined by
Microsoft.
For more details see https://msdn.microsoft.com/en-us/library/aa920051.aspx
Flags - 处理解密所需的标志
- 0x0001 - 需要密码才能解密
- 0x0002 - 仅证书
- 0x0003 - 解密需要密码或证书
- 0x0007 - 保留供将来使用
- 0x000F - 保留供将来使用
- 0x0100 - 表示使用了非 OAEP 密钥包装。 如果设置了此字段,则提取所需的版本必须至少为 61。这意味着使用 ErdData 生成主会话密钥时不使用 OAEP 密钥包装
- 0x4000 - ErdData 必须使用 3DES-168 解密,否则使用用于加密文件内容的相同算法
- 0x8000 - 保留供将来使用
| Modifier and Type | Method and Description |
| —- | —- |
| PKWareExtraHeader.EncryptionAlgorithm | getEncryptionAlgorithm()
获取加密算法 | | PKWareExtraHeader.HashAlgorithm | getHashAlgorithm()
获取HASH算法 | | long | getRecordCount()
获取记录数量 | | void | parseCentralDirectoryFormat(byte[] data, int offset, int length)
解析中央目录格式 | | void | parseFileFormat(byte[] data, int offset, int length)
解析文件头部格式 | | void | parseFromCentralDirectoryData(byte[] data, int offset, int length)
从此数组中填充数据,就好像它在中央目录数据中一样 | | void | parseFromLocalFileData(byte[] data, int offset, int length)
从此数组中填充数据,就好像它在本地文件数据中一样。 |
X0019_EncryptionRecipientCertificateList
public class X0019_EncryptionRecipientCertificateList
extends PKWareExtraHeader
PKCS#7 加密收件人证书列表 (0x0019)。
该字段可以包含有关加密处理中使用的每个证书的信息,并且可以用于识别允许解密加密文件的人。 此字段应仅出现在存档额外数据记录中。 此字段不是必需的,仅用于通过保留公共加密密钥数据来帮助存档修改。 个人安全要求可能会要求省略这些数据以阻止信息泄露。
注意:所有字段以 Intel 低字节/高字节顺序存储
Value Size Description
----- ---- -----------
(CStore) 0x0019 2 bytes Tag for this "extra" block type
TSize 2 bytes Size of the store data
Version 2 bytes Format version number - must 0x0001 at this time
CStore (var) PKCS#7 data blob
X5455_ExtendedTimestamp
public class X5455_ExtendedTimestamp
extends Object
implements ZipExtraField, Cloneable, Serializable
一个额外的字段,用于存储 zip 条目的附加文件和目录时间戳数据。每个 zip 条目最多可以包含三个时间戳(修改、访问、创建*)。时间戳存储为 32 位有符号整数,表示自 UNIX 纪元(1970 年 1 月 1 日,UTC)以来的秒数。该字段改进了 zip 的默认时间戳粒度,因为它允许存储额外的时间戳,此外,时间戳使用每秒粒度存储(zip 的默认行为只能将时间戳存储到最接近的偶数秒)。
不幸的是,32(有符号)位只能存储 2037 年之前的日期,因此这个额外的字段最终将被淘汰。在它持续的时候享受它!
- modifyTime:文件/目录修改的最近时间(或文件/目录创建,如果条目自创建后未修改)
- accessTime:最近打开文件/目录的时间(例如,从磁盘读取)。许多人使用 NOATIME 挂载选项禁止他们的操作系统更新此值以优化磁盘行为,因此它并不总是可靠的。在这些情况下,它总是等于 modifyTime
- *createTime:现代 linux 文件系统(例如 ext2 和更新版本)似乎不会存储这样的值,因此通常在 zip 额外字段中完全省略它。也许其他 Unix 系统会跟踪这一点
我们使用 Info-Zip 源存档中给出的字段定义:zip-3.0.tar.gz/proginfo/extrafld.txt
Value Size Description
----- ---- -----------
0x5455 Short tag for this extra block type ("UT")
TSize Short total data size for this block
Flags Byte info bits
(ModTime) Long time of last modification (UTC/GMT)
(AcTime) Long time of last access (UTC/GMT)
(CrTime) Long time of original creation (UTC/GMT)
Central-header version:
Value Size Description
----- ---- -----------
0x5455 Short tag for this extra block type ("UT")
TSize Short total data size for this block
Flags Byte info bits (refers to local header!)
(ModTime) Long time of last modification (UTC/GMT)
Modifier and Type | Method and Description |
---|---|
Object | clone() |
boolean | equals(Object o) |
Date | getAccessJavaTime() 以该 zip 条目的 java.util.Date 形式返回访问时间,如果 zip 条目中不存在此类时间戳,则返回 null。 |
ZipLong | getAccessTime() 以 ZipLong 对象的形式返回此 zip 条目的访问时间(自纪元以来的秒数),如果 zip 条目中不存在此类时间戳,则返回 null。 |
byte[] | getCentralDirectoryData() |
ZipShort | getCentralDirectoryLength() |
Date | getCreateJavaTime() 以该 zip 条目的 java.util.Date 形式返回创建时间,如果 zip 条目中不存在此类时间戳,则返回 null。 |
ZipLong | getCreateTime() 以 ZipLong 对象的形式返回此 zip 条目的创建时间(自纪元以来的秒数),如果 zip 条目中不存在此类时间戳,则返回 null。 |
byte | getFlags() |
ZipShort | getHeaderId() |
byte[] | getLocalFileDataData() |
ZipShort | getLocalFileDataLength() |
Date | getModifyJavaTime() |
ZipLong | getModifyTime() |
int | hashCode() |
boolean | isBit0_modifyTimePresent() 返回flags字节的 bit0 是否已设置,表示此特定 zip 条目中是否存在修改时间戳 |
boolean | isBit1_accessTimePresent() 返回flags字节的 bit1 是否已设置,表示此特定 zip 条目中是否存在最后访问时间戳 |
boolean | isBit2_createTimePresent() 返回flags字节的 bit2 是否已设置,表示此特定 zip 条目中是否存在创建时间戳 |
void | parseFromCentralDirectoryData(byte[] buffer, int offset, int length) |
void | parseFromLocalFileData(byte[] data, int offset, int length) |
void | setAccessJavaTime(Date d) |
void | setAccessTime(ZipLong l) |
void | setCreateJavaTime(Date d) |
void | setCreateTime(ZipLong l) |
void | setFlags(byte flags) |
void | setModifyJavaTime(Date d) |
void | setModifyTime(ZipLong l) |
String | toString() |
X7875_NewUnix
public class X7875_NewUnix
extends Object
implements ZipExtraField, Cloneable, Serializable
存储给定 zip 条目的 UNIX UID/GID 数据(所有者和组所有权)的额外字段。 我们使用 Info-Zip 源存档中给出的字段定义:zip-3.0.tar.gz/proginfo/extrafld.txt
本地头部(local-header)版本:
Value Size Description
----- ---- -----------
0x7875 Short tag for this extra block type ("ux")
TSize Short total data size for this block
Version 1 byte version of this extra field, currently 1
UIDSize 1 byte Size of UID field
UID Variable UID for this entry (little endian)
GIDSize 1 byte Size of GID field
GID Variable GID for this entry (little endian)
中心头部(central-header)版本:
Value Size Description
----- ---- -----------
0x7855 Short tag for this extra block type ("Ux")
TSize Short total data size for this block (0)
Modifier and Type | Method and Description |
---|---|
Object | clone() |
boolean | equals(Object o) |
byte[] | getCentralDirectoryData() |
ZipShort | getCentralDirectoryLength() |
long | getGID() |
ZipShort | getHeaderId() |
byte[] | getLocalFileDataData() |
ZipShort | getLocalFileDataLength() |
long | getUID() |
int | hashCode() |
void | parseFromCentralDirectoryData(byte[] buffer, int offset, int length) |
void | parseFromLocalFileData(byte[] data, int offset, int length) |
void | setGID(long l) |
void | setUID(long l) |
String | toString() |
Zip64ExtendedInformationExtraField
public class Zip64ExtendedInformationExtraField
extends Object
implements ZipExtraField
保存使用 Zip64 功能的条目的大小和其他扩展信息。
目前 Commons Compress 不支持对中央目录进行加密,因此 APPNOTE.TXT 中关于屏蔽的注释不适用。
该实现依赖于从本地文件头读取的数据,并假设两个大小值始终存在。
Modifier and Type | Method and Description |
---|---|
byte[] | getCentralDirectoryData() |
ZipShort | getCentralDirectoryLength() |
ZipEightByteInteger | getCompressedSize() 存储在此额外字段中的压缩大小 |
ZipLong | getDiskStartNumber() 存储在此额外字段中的磁盘起始编号 |
ZipShort | getHeaderId() |
byte[] | getLocalFileDataData() |
ZipShort | getLocalFileDataLength() |
ZipEightByteInteger | getRelativeHeaderOffset() 存储在此额外字段中的相对头部偏移量 |
ZipEightByteInteger | getSize() 存储在此额外字段中的未压缩大小 |
void | parseFromCentralDirectoryData(byte[] buffer, int offset, int length) |
void | parseFromLocalFileData(byte[] buffer, int offset, int length) |
void | reparseCentralDirectoryData(boolean hasUncompressedSize, boolean hasCompressedSize, boolean hasRelativeHeaderOffset, boolean hasDiskStart) 解析从中央目录额外字段读取的原始字节,并了解哪些字段应该存在 |
void | setCompressedSize(ZipEightByteInteger compressedSize) |
void | setDiskStartNumber(ZipLong ds) |
void | setRelativeHeaderOffset(ZipEightByteInteger rho) |
void | setSize(ZipEightByteInteger size) |
ZipArchiveEntry
public class ZipArchiveEntry
extends ZipEntry
implements ArchiveEntry, EntryStreamOffsets
添加更好地处理额外字段并提供对内部和外部文件属性的访问的扩展。
额外的数据预计将遵循 APPNOTE.TXT 的建议:
- 额外的字节数组由一系列额外的字段组成
- 每个额外的字段都以一个两字节的标头 id 开头,后跟一个保存剩余数据长度的两字节序列。
任何无法通过上述规则解析的额外数据将被视为“不可解析”的额外数据,并由此类的方法进行不同的处理。 如果尝试读取或写入不符合建议的额外数据,则 Apache Commons Compress 1.1 之前的版本将引发异常。
这个类不是线程安全的
Modifier and Type | Method and Description |
---|---|
void | addAsFirstExtraField(ZipExtraField ze) 添加额外字段 - 替换已存在的相同类型的额外字段。新的额外字段将是第一个 |
void | addExtraField(ZipExtraField ze) 添加额外字段 - 替换已存在的相同类型的额外字段 |
Object | clone() |
boolean | equals(Object obj) |
protected int | getAlignment() 获取当前配置的对齐方式 |
byte[] | getCentralDirectoryExtra() |
ZipArchiveEntry.CommentSource | getCommentSource() 评论字段值的来源 |
long | getDataOffset() 获取归档文件中数据流的偏移量 |
long | getDiskNumberStart() 此条目开始的拆分段的编号 |
long | getExternalAttributes() 检索外部文件属性 |
ZipExtraField | getExtraField(ZipShort type) 通过header id 检索额外字段 |
ZipExtraField [] |
getExtraFields() 检索已成功解析的所有额外字段 |
ZipExtraField [] |
getExtraFields(boolean includeUnparseable) 检索所有额外字段 |
ZipExtraField [] |
getExtraFields(ExtraFieldParsingBehavior parsingBehavior) 检索所有额外字段。 |
GeneralPurposeBit | getGeneralPurposeBit() “通用位”字段 |
int | getInternalAttributes() 检索内部文件属性 |
Date | getLastModifiedDate() 使用 Date 包装 ZipEntry.getTime() 作为条目的最后修改日期 |
byte[] | getLocalFileDataExtra() 检索本地文件数据的额外数据 |
protected long | getLocalHeaderOffset() |
int | getMethod() 返回此条目的压缩方法,如果未指定压缩方法,则返回 -1 |
String | getName() |
ZipArchiveEntry.NameSource | getNameSource() 名称字段值的来源 |
int | getPlatform() 平台规范放入中央文件头的“版本制作者”部分 |
int | getRawFlag() The content of the flags field. |
byte[] | getRawName() 在使用配置或猜测的编码进行转换之前,返回组成名称的原始字节 |
long | getSize() 获取条目数据的未压缩大小 |
int | getUnixMode() Unix 权限 |
UnparseableExtraFieldData | getUnparseableExtraFieldData() 查找无法正确解析的额外字段数据 |
int | getVersionMadeBy() “版本制作者”字段 |
int | getVersionRequired() “扩展所需的版本”字段。 |
int | hashCode() |
boolean | isDirectory() |
boolean | isStreamContiguous() 指示流是否连续 |
boolean | isUnixSymlink() 如果此条目表示 unix 符号链接,则返回 true,在这种情况下,条目的内容包含符号链接的目标路径 |
void | removeExtraField(ZipShort type) 移除一个额外字段 |
void | removeUnparseableExtraFieldData() 移除一个未解析的额外字段 |
void | setAlignment(int alignment) |
void | setCentralDirectoryExtra(byte[] b) |
void | setCommentSource(ZipArchiveEntry.CommentSource commentSource) |
protected void | setDataOffset(long dataOffset) |
void | setDiskNumberStart(long diskNumberStart) |
void | setExternalAttributes(long value) |
protected void | setExtra() 不幸的是 java.util.zip.ZipOutputStream 似乎直接访问了额外的数据,所以覆盖 getExtra 没有帮助——我们需要直接修改 super 的数据 |
void | setExtra(byte[] extra) 将给定字节解析为额外的字段数据,并将任何不可解析的数据作为 UnparseableExtraFieldData 实例使用 |
void | setExtraFields(ZipExtraField[] fields) 用新数组替换所有当前附加的额外字段 |
void | setGeneralPurposeBit(GeneralPurposeBit b) “通用位”字段 |
void | setInternalAttributes(int value) 设置内部文件属性 |
protected void | setLocalHeaderOffset(long localHeaderOffset) |
void | setMethod(int method) |
protected void | setName(String name) |
protected void | setName(String name, byte[] rawName) 使用原始字节和通过猜测或使用配置的编码从中创建的字符串来设置名称 |
void | setNameSource(ZipArchiveEntry.NameSource nameSource) |
protected void | setPlatform(int platform) Set the platform (UNIX or FAT). |
void | setRawFlag(int rawFlag) |
void | setSize(long size) |
protected void | setStreamContiguous(boolean isStreamContiguous) |
void | setTime(FileTime fileTime) |
void | setUnixMode(int mode) |
void | setVersionMadeBy(int versionMadeBy) |
void | setVersionRequired(int versionRequired) |
ZipArchiveEntryRequest
ZipArchiveEntry 的线程安全表示,用于将条目添加到并行存档。
Modifier and Type | Method and Description |
---|---|
static ZipArchiveEntryRequest | createZipArchiveEntryRequest(ZipArchiveEntry zipArchiveEntry, InputStreamSupplier payloadSupplier) Create a ZipArchiveEntryRequest |
int | getMethod() 压缩的方法 |
InputStream | getPayloadStream() 将添加到此 zip 条目的有效负载 |
createZipArchiveEntryRequest
public static ZipArchiveEntryRequest createZipArchiveEntryRequest(ZipArchiveEntry zipArchiveEntry, InputStreamSupplier payloadSupplier)
创建 ZipArchiveEntryRequest
Parameters:
zipArchiveEntry - 要使用的条目
payloadSupplier - 将添加到 zip 条目的有效负载
Returns:
The newly created request
ZipArchiveInputStream
public class ZipArchiveInputStream extends ArchiveInputStream
implements InputStreamStatistics
实现一个可以读取 Zip 档案的输入流。
从 Apache Commons Compress 开始,它透明地支持 Zip64 扩展,因此单个条目和存档大于 4 GB 或超过 65536 个条目。
从文件读取时首选 ZipFile 类,因为 ZipArchiveInputStream 受限于在返回条目之前无法读取中央目录标题。 特别是 ZipArchiveInputStream
- 可能会返回根本不属于中央目录的条目,不应将其视为存档的一部分
- 可能会返回多个具有相同名称的条目
- 不会返回内部或外部属性
- 可能会返回不完整的额外字段数据
- 如果存档使用数据描述符功能,则在到达下一个条目之前,可能会返回条目的未知大小和 CRC 值
| Modifier and Type | Method and Description |
| —- | —- |
| boolean | canReadEntryData(ArchiveEntry ae)
此类是否能够读取给定条目 | | void | close() | | long | getCompressedCount() | | ArchiveEntry | getNextEntry()
Returns the next Archive Entry in this Stream. | | ZipArchiveEntry | getNextZipEntry() | | long | getUncompressedCount() | | static boolean | matches(byte[] signature, int length)
检查签名是否与 zip 文件的预期匹配 | | int | read(byte[] buffer, int offset, int length) | | long | skip(long value)
跳过并丢弃此输入流中数据的值字节 |
ZipArchiveOutputStream
public class ZipArchiveOutputStream extends ArchiveOutputStream
java.util.zip.ZipOutputStream 的重新实现,它确实处理了这个包的扩展功能,特别是内部/外部文件属性和具有不同布局的本地文件数据和中央目录条目的额外字段。
当此类知道输出将发送到文件并且不应创建拆分存档时,该类将尝试使用 SeekableByteChannel。
如果无法使用 SeekableByteChannel,此实现将使用 Data Descriptor 来存储 DEFLATED 条目的大小和 CRC 信息,这意味着您不需要自己计算它们。不幸的是,这对于 STORED 方法是不可能的,在调用 putArchiveEntry(ArchiveEntry) 之前需要设置 CRC 和未压缩的大小信息。
从 Apache Commons Compress 1.3 开始,它透明地支持 Zip64 扩展,因此在大多数情况下,单个条目和档案大于 4 GB 或超过 65536 个条目,但通过 setUseZip64(org.apache.commons.compress.archivers.zip. Zip64 模式)。如果流无法使用 SeekableByteChannel 并且您尝试编写未知大小的 ZipArchiveEntry,则默认情况下将禁用 Zip64 扩展。
这个类不是线程安全的
Modifier and Type | Method and Description |
---|---|
void | addRawArchiveEntry(ZipArchiveEntry entry, InputStream rawStream) 添加带有原始输入流的存档条目 |
boolean | canWriteEntryData(ArchiveEntry ae) 此流是否能够写入给定条目 |
void | close() |
void | closeArchiveEntry() 写入此条目的所有必要数据 |
ArchiveEntry | createArchiveEntry(File inputFile, String entryName) 创建一个新的 zip 条目,从给定文件中获取一些信息并使用提供的名称 |
ArchiveEntry | createArchiveEntry(Path inputPath, String entryName, LinkOption… options) 创建一个新的 zip 条目,从给定文件中获取一些信息并使用提供的名称 |
protected void | deflate() 将下一个压缩数据块写入输出流 |
void | finish() 完成向该流添加条目,而不关闭它 |
void | flush() 刷新此输出流并强制将任何缓冲的输出字节写出到流中 |
String | getEncoding() |
boolean | isSeekable() |
void | putArchiveEntry(ArchiveEntry archiveEntry) 将归档条目的标头写入输出流 |
void | setComment(String comment) |
void | setCreateUnicodeExtraFields(ZipArchiveOutputStream.UnicodeExtraFieldPolicy b) |
void | setEncoding(String encoding) |
void | setFallbackToUTF8(boolean b) 如果无法使用指定的编码对文件名进行编码,是否回退到 UTF 和语言编码标志 |
void | setLevel(int level) 设置后续条目的压缩级别 |
void | setMethod(int method) 设置后续条目的压缩方法 |
void | setUseLanguageEncodingFlag(boolean b) 如果文件名编码为 UTF-8,是否设置语言编码标志 |
void | setUseZip64(Zip64Mode mode) 是否将使用 Zip64 扩展 |
void | write(byte[] b, int offset, int length) 写入字节数组到 ZIP 条目 |
protected void | writeCentralDirectoryEnd() 写入“中央目录记录结束” |
protected void | writeCentralFileHeader(ZipArchiveEntry ze) 写入中央文件头条目 |
protected void | writeDataDescriptor(ZipArchiveEntry ze) 写入数据描述符条目 |
protected void | writeLocalFileHeader(ZipArchiveEntry ze) 写入本地文件头条目 |
protected void | writeOut(byte[] data) 将字节写入输出或随机访问文件 |
protected void | writeOut(byte[] data, int offset, int length) 将字节写入输出或随机访问文件 |
void | writePreamble(byte[] preamble) 写入前导数据 |
void | writePreamble(byte[] preamble, int offset, int length) 写入前导数据 |
protected void | writeZip64CentralDirectory() 写入“ZIP64 End of central dir record”和“ZIP64 End of central dir locator” |
ZipArchiveOutputStream.UnicodeExtraFieldPolicy
表示创建 Unicode 额外字段的可能策略的枚举
Modifier and Type | Field and Description |
---|---|
static ZipArchiveOutputStream.UnicodeExtraFieldPolicy | ALWAYS 始终创建 Unicode 额外字段 |
static ZipArchiveOutputStream.UnicodeExtraFieldPolicy | NEVER 从不创建 Unicode 额外字段 |
static ZipArchiveOutputStream.UnicodeExtraFieldPolicy | NOT_ENCODEABLE 为无法使用指定编码进行编码的文件名创建 Unicode 额外字段 |
ZipEightByteInteger
表示具有 ZIP 文件小端字节顺序转换规则的八字节整数的工具类
Modifier and Type | Method and Description |
---|---|
boolean | equals(Object o) |
byte[] | getBytes() 以大端字节顺序获取 8 个字节的值 |
static byte[] | getBytes(BigInteger value) 以大端字节顺序获取 8 个字节的值 |
static byte[] | getBytes(long value) 以大端字节顺序获取 8 个字节的值 |
long | getLongValue() 获取一个 java long类型的值 |
static long | getLongValue(byte[] bytes) 从八字节数组中获取 Java long 值的辅助方法 |
static long | getLongValue(byte[] bytes, int offset) 从给定数组偏移量开始的 8 个字节获取 Java long 值的辅助方法 |
BigInteger | getValue() Get value as Java BigInteger. |
static BigInteger | getValue(byte[] bytes) 从八字节数组中获取 Java long 值的辅助方法 |
static BigInteger | getValue(byte[] bytes, int offset) 从给定数组偏移量开始的八个字节中获取 Java BigInteger 值的辅助方法 |
int | hashCode() |
String | toString() |
ZipEncodingHelper
用于在 zip 文件中对文件名进行稳健编码的静态辅助函数
Modifier and Type | Method and Description |
---|---|
static ZipEncoding | getZipEncoding(String name) Instantiates a zip encoding. |
ZipFile
替换 java.util.ZipFile。
此类添加了对 UTF-8 以外的文件名编码的支持(这是处理由本地 zip 工具创建的 ZIP 文件所必需的,并且能够像在自解压档案中找到的那样跳过序言。此外,它返回 org.apache.commons.compress.archivers.zip.ZipArchiveEntry 的实例而不是 java.util.zip.ZipEntry。
该类并没有继承至 java.util.zip.ZipFile,因为无论如何它都必须重新实现所有方法。与 java.util.ZipFile 一样,它在后台使用 SeekableByteChannel 并支持压缩和未压缩条目。从 Apache Commons Compress 1.3 开始,它还透明地支持 Zip64 扩展,因此单个条目和存档大于 4 GB 或超过 65536 个条目。
方法签名模仿 java.util.zip.ZipFile 的方法签名,但有几个例外:
- 没有 getName 方法
- 条目已重命名为 getEntries
- getEntries 和 getEntry 返回 org.apache.commons.compress.archivers.zip.ZipArchiveEntry 实例
- close 允许抛出 IOException
Constructors
Constructor and Description |
---|
ZipFile(File f) 打开给定文件进行读取,假定文件名为“UTF8”编码 |
ZipFile(File f, String encoding) 打开给定的文件进行读取,假设文件名的指定编码并扫描 unicode 额外字段 |
ZipFile(File f, String encoding, boolean useUnicodeExtraFields) 打开给定的文件进行读取,假定文件名的指定编码 |
ZipFile(File f, String encoding, boolean useUnicodeExtraFields, boolean ignoreLocalFileHeader) 打开给定的文件进行读取,假定文件名的指定编码 |
ZipFile(SeekableByteChannel channel) 打开给定的通道进行读取,假设文件名为“UTF8”编码 |
ZipFile(SeekableByteChannel channel, String encoding) 假设文件名的指定编码,打开给定的通道进行读取 |
ZipFile(SeekableByteChannel channel, String archiveName, String encoding, boolean useUnicodeExtraFields) 假设文件名的指定编码,打开给定的通道进行读取 |
ZipFile(SeekableByteChannel channel, String archiveName, String encoding, boolean useUnicodeExtraFields, boolean ignoreLocalFileHeader) 假设文件名的指定编码,打开给定的通道进行读取 |
ZipFile(String name) 打开给定的文件进行读取,假设文件名为“UTF8”编码 |
ZipFile(String name, String encoding) 打开给定文件进行读取,假设文件名的指定编码,扫描 unicode 额外字段 |
Methods
ZipLong
表示具有 ZIP 文件小端字节顺序转换规则的四字节整数的工具类
Fields
Modifier and Type | Field and Description |
---|---|
static ZipLong | AED_SIG 归档额外数据记录签名 |
static ZipLong | CFH_SIG 中心文件头部签名 |
static ZipLong | DD_SIG 数据描述符签名 |
static ZipLong | LFH_SIG 本地文件头部签名 |
static ZipLong | SINGLE_SEGMENT_SPLIT_MARKER 标记应该拆分或跨越但最后只需要一个片段的 ZIP 档案(因此实际上既不拆分也不跨越) |
Methods
Modifier and Type | Method and Description |
---|---|
Object | clone() |
boolean | equals(Object o) |
byte[] | getBytes() 以大端字节顺序获取四个字节的值 |
static byte[] | getBytes(long value) 以大端字节顺序获取四个字节的值 |
int | getIntValue() 获取 java int 值(作为签名) |
long | getValue() 获取 Java long 的值 |
static long | getValue(byte[] bytes) 从四字节数组中获取 Java long 值的辅助方法 |
static long | getValue(byte[] bytes, int offset) 从给定数组偏移量开始的四个字节获取 Java long 值的辅助方法 |
int | hashCode() |
void | putLong(byte[] buf, int offset) |
static void | putLong(long value, byte[] buf, int offset) |
String | toString() |
ZipShort
表示具有 ZIP 文件小端字节顺序转换规则的两字节整数的工具类
Modifier and Type | Method and Description |
---|---|
Object | clone() |
boolean | equals(Object o) |
byte[] | getBytes() 以大端字节顺序获取两个字节的值 |
static byte[] | getBytes(int value) 以大端字节顺序获取两字节的值 |
long | getValue() 获取 Java int 的值 |
static long | getValue(byte[] bytes) 从两字节数组中获取 Java long 值的辅助方法 |
static long | getValue(byte[] bytes, int offset) 从给定数组偏移量开始的两个字节获取 Java long 值的辅助方法 |
int | hashCode() |
static void | putShort(int value, byte[] buf, int offset) |
String | toString() |
ZipSplitReadOnlySeekableByteChannel
public class ZipSplitReadOnlySeekableByteChannel extends MultiReadOnlySeekableByteChannel
MultiReadOnlySeekableByteChannel 知道拆分的 ZIP 存档应该是什么样子。
如果您想使用 ZipFile 读取拆分存档,则从存档的各个部分创建此类的实例。
Modifier and Type | Method and Description |
---|---|
static SeekableByteChannel | buildFromLastSplitSegment(File lastSegmentFile) 从最后一段连接 zip 拆分文件(扩展名应该是 .zip |
static SeekableByteChannel | forFiles(File… files) 连接给定的文件 |
static SeekableByteChannel | forFiles(File lastSegmentFile, Iterable[File](https://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true) files) 连接给定的文件 |
static SeekableByteChannel | forOrderedSeekableByteChannels(SeekableByteChannel… channels) 连接给定的通道 |
static SeekableByteChannel | forOrderedSeekableByteChannels(SeekableByteChannel lastSegmentChannel, Iterable[SeekableByteChannel](https://docs.oracle.com/javase/7/docs/api/java/nio/channels/SeekableByteChannel.html?is-external=true) channels) 连接给定的通道 |
ZipUtil
用于处理 DOS 和 Java 时间转换的工具类。
这个类是不可变的
Modifier and Type | Method and Description |
---|---|
static long | adjustToLong(int i) 假设一个负整数确实是一个正整数,它已经环绕并重新创建了原始值 |
static long | dosToJavaTime(long dosTime) 将 DOS 时间转换为 Java 时间(自纪元以来的毫秒数) |
static Date | fromDosTime(ZipLong zipDosTime) 将 DOS 日期/时间字段转换为 Date 对象 |
static byte[] | reverse(byte[] array) 反转 byte 数组 |
static int | signedByteToUnsignedInt(byte b) 将有符号字节转换为无符号整数表示(例如,-1 变为 255) |
static ZipLong | toDosTime(Date time) 将 Date 对象转换为 DOS 日期/时间字段 |
static byte[] | toDosTime(long t) 将 Date 对象转换为 DOS 日期/时间字段 |
static void | toDosTime(long t, byte[] buf, int offset) 将 Date 对象转换为 DOS 日期/时间字段 |
static byte | unsignedIntToSignedByte(int i) 将无符号整数转换为有符号字节(例如,255 变为 -1) |
PKWareExtraHeader.EncryptionAlgorithm
public static enum PKWareExtraHeader.EncryptionAlgorithm
extends Enum<PKWareExtraHeader.EncryptionAlgorithm>
Enum Constant and Description |
---|
AES128 |
AES192 |
AES256 |
DES |
RC2 |
RC2pre52 |
RC4 |
TripleDES168 |
TripleDES192 |
UNKNOWN |
PKWareExtraHeader.HashAlgorithm
public static enum PKWareExtraHeader.HashAlgorithm
extends Enum<PKWareExtraHeader.HashAlgorithm>
Enum Constant and Description |
---|
CRC32 |
MD5 |
NONE |
RIPEND160 |
SHA1 |
SHA256 |
SHA384 |
SHA512 |
Zip64Mode
public enum Zip64Mode
extends Enum<Zip64Mode>
Enum Constant and Description |
---|
Always 对所有条目使用 Zip64 扩展,即使很明显它不是必需的 |
AlwaysWithCompatibility 始终像 Always 一样对 LFH 和中央目录使用 Zip64 扩展,同时像 AsNeeded 一样在 CFH 中根据需要对 LFH 的相对偏移和磁盘编号 start 进行编码 |
AsNeeded 对所有需要的条目使用 Zip64 扩展,不要将它们用于明显不需要它们的条目 |
Never 任何条目都不使用 Zip64 扩展 |
ZipArchiveEntry.CommentSource
public static enum ZipArchiveEntry.CommentSource
extends Enum<ZipArchiveEntry.CommentSource>
指示如何确定此条目的注释
Enum Constant and Description |
---|
COMMENT 注释已使用创建 ZipArchiveInputStream 或 ZipFile 时指定的存档编码(默认为平台的默认编码)从存档中读取 |
UNICODE_EXTRA_FIELD 该注释已从 Unicode 额外字段中读取 |
ZipArchiveEntry.ExtraFieldParsingMode
public static enum ZipArchiveEntry.ExtraFieldParsingMode
extends Enum<ZipArchiveEntry.ExtraFieldParsingMode>
implements ExtraFieldParsingBehavior
如何尝试解析额外的字段。
配置以下行为:
- 如果额外的字段内容不遵循推荐的两字节 id 后跟两字节长度的模式,会发生什么?
- 如果 Commons Compress 普遍支持额外的字段,但其内容无法正确解析,会发生什么情况? 例如,如果存档损坏、触发 Commons Compress 中的错误或额外字段使用 Commons Compress 不(尚)支持的版本,则可能会发生这种情况。
| Enum Constant and Description |
| —- |
| BEST_EFFORT
尝试解析尽可能多的额外字段,并包装未知的额外字段以及无法在 UnrecognizedExtraField 中解析的受支持的额外字段 | | DRACONIC
果无法解析任何已识别的额外字段或任何额外字段违反推荐模式,则抛出异常 | | ONLY_PARSEABLE_LENIENT
Try to parse as many extra fields as possible and wrap unknown extra fields as well as supported extra fields that cannot be parsed in UnrecognizedExtraField. | | ONLY_PARSEABLE_STRICT
尝试解析尽可能多的额外字段,并将未知的额外字段包装在 UnrecognizedExtraField 中 | | STRICT_FOR_KNOW_EXTRA_FIELDS
尝试解析尽可能多的额外字段,并将未知的额外字段包装在 UnrecognizedExtraField 中 |
ZipArchiveEntry.NameSource
public static enum ZipArchiveEntry.NameSource
extends Enum<ZipArchiveEntry.NameSource>
指示如何确定此条目的名称
Enum Constant and Description |
---|
NAME 该名称已使用创建 ZipArchiveInputStream 或 ZipFile 时指定的存档编码(默认为平台的默认编码) |
NAME_WITH_EFS_FLAG 该名称已从存档中读取,并且存档指定了 EFS 标志,该标志指示该名称已被编码为 UTF-8 |
UNICODE_EXTRA_FIELD 该名称已从 Unicode 额外字段中读取 |
ZipMethod
public enum ZipMethod extends Enum<ZipMethod>
已知压缩方法列表 commons compress 目前不支持其中许多方法
Enum Constant and Description |
---|
AES_ENCRYPTED AES 加密的压缩方法 99 |
BZIP2 bzip2的压缩方法12 |
DEFLATED .压缩(deflate)条目的压缩方法 8 |
ENHANCED_DEFLATED 压缩方法 9 用于增强deflate |
EXPANDING_LEVEL_1 随着压缩因子 1 减少 |
EXPANDING_LEVEL_2 随着压缩因子 2 减少 |
EXPANDING_LEVEL_3 随着压缩因子 3 减少 |
EXPANDING_LEVEL_4 随着压缩因子 4 减少 |
IMPLODING Imploding - 内爆 |
JPEG 用于 Jpeg 压缩的压缩方法 96 |
LZMA 用于 LZMA 压缩的压缩方法 14 |
PKWARE_IMPLODING PKWARE 数据压缩库内爆 |
PPMD PPMd 的压缩方法 98 |
STORED 未压缩条目的压缩方法 0 |
TOKENIZATION Tokenization. |
UNKNOWN Unknown compression method. |
UNSHRINKING UnShrinking - 不收缩 |
WAVPACK WavPack 的压缩方法 97 |
XZ XZ 的压缩方法 95 |
org.apache.commons.compress.compressors
CompressorStreamProvider
创建 Compressor CompressorInputStreams 和 CompressorOutputStreams。
Modifier and Type | Method and Description |
---|---|
CompressorInputStream | createCompressorInputStream(String name, InputStream in, boolean decompressUntilEOF) 从压缩器名称和输入流创建压缩器输入流 |
CompressorOutputStream | createCompressorOutputStream(String name, OutputStream out) 从压缩器名称和输出流创建压缩器输出流 |
Set[String](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true) | getInputStreamCompressorNames() 获取此 provider 的所有输入流压缩器名称 |
Set[String](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true) | getOutputStreamCompressorNames() 获取此 provider 的所有输出流压缩器名称 |
CompressorStreamFactory
public class CompressorStreamFactory extends Object
implements CompressorStreamProvider
从名称创建 Compressor[In|Out]putStreams 的工厂。 要添加其他实现类,您应该继承 CompressorStreamFactory 并重写适当的方法(当然还要从 super 调用它们的实现)。
示例(压缩文件):
final OutputStream out = Files.newOutputStream(output.toPath());
CompressorOutputStream cos = new CompressorStreamFactory()
.createCompressorOutputStream(CompressorStreamFactory.BZIP2, out);
IOUtils.copy(Files.newInputStream(input.toPath()), cos);
cos.close();
示例(解压缩文件):
final InputStream is = Files.newInputStream(input.toPath());
CompressorInputStream in = new CompressorStreamFactory().createCompressorInputStream(CompressorStreamFactory.BZIP2,
is);
IOUtils.copy(in, Fi
这个类是不可变的
前提是不使用已弃用的方法 setDecompressConcatenated。
这个类是线程安全的
即使使用了已弃用的方法 setDecompressConcatenated
Fields
Modifier and Type | Field and Description |
---|---|
static String | BROTLI 用于标识 BROTLI 压缩算法的常量(值“br”) |
static String | BZIP2 用于标识 BZIP2 压缩算法的常量(值“bzip2”) |
static String | DEFLATE 用于标识 DEPLATE 压缩算法的常量(值“deflate”) |
static String | DEFLATE64 用于标识 DEPLATE64 压缩算法的常量(值“deflate64”) |
static String | GZIP 用于标识 GZIP 压缩算法的常量(值“gz”) |
static String | LZ4_BLOCK 用于标识 LZ4 压缩算法的常量(值“lz4_block”) |
static String | LZ4_FRAMED 用于标识 LZ4 压缩算法的常量(值“lz4_framed”) |
static String | LZMA 用于标识 LZMA 压缩算法的常量(值“lzma”) |
static String | PACK200 用于标识 PACK200 压缩算法的常量(值“pack200”) |
static String | SNAPPY_FRAMED 常量(值“snappy-framed”)用于标识“框架”的 Snappy 压缩方法 |
static String | SNAPPY_RAW 用于标识“原始”Snappy 压缩方法的常量(值“snappy-raw”) |
static String | XZ Constant (value “xz”) used to identify the XZ compression method. |
static String | Z 用于标识传统 Unix 压缩方法的常量(值“z”) |
static String | ZSTANDARD 用于标识 Zstandard 压缩算法的常量(值“zstd”) |
Methods
CompressorInputStream
Modifier and Type | Method and Description |
---|---|
protected void | count(int read) 增加已读取字节的计数器 |
protected void | count(long read) 增加已读取字节的计数器 |
long | getBytesRead() 返回从此流中读取的当前字节数 |
int | getCount() Deprecated. 对于大型归档,此方法可能会产生错误的结果,请改用 #getBytesRead |
long | getUncompressedCount() 返回流读取的原始或压缩字节的数量 |
protected void | pushedBackBytes(long pushedBack) 递减已读取字节的计数器 |
CompressorOutputStream
FileNameUtil
压缩格式的文件名映射代码
Modifier and Type | Method and Description |
---|---|
String | getCompressedFilename(String fileName) 将给定的文件名映射到压缩后文件应具有的名称 |
String | getUncompressedFilename(String fileName) 将压缩文件的给定名称映射到解压缩后文件应具有的名称 |
boolean | isCompressedFilename(String fileName) 检测给定文件名中的常见格式后缀 |
org.apache.commons.compress.compressors.gzip
GzipCompressorInputStream
public class GzipCompressorInputStream
extends CompressorInputStream
implements InputStreamStatistics
解压缩 .gz 文件的输入流。支持解压缩连接的 .gz 文件,这在解压缩独立 .gz 文件时很重要。
GZIPInputStream 不解压缩连接的 .gz 文件:它在第一个成员之后停止并默默地忽略其余部分。它不会让读取位置指向下一个成员的开头,这使得解决缺乏连接支持的问题变得困难。
这个类没有使用 GZIPInputStream,而是有自己的 .gz 容器格式解码器。实际的解压缩是用 Inflater 完成的。
如果您使用带有一些 InputStream 的构造函数 GzipCompressorInputStream(in) 或 GzipCompressorInputStream(in, false),那么一旦第一个内部成员被完全读取,read() 将返回 -1。如果有第二个 gzip 成员,则输入流将定位在第二个 gzip 成员的开头。
如果您使用带有一些 InputStream 的构造函数 GzipCompressorInputStream(in, true) ,那么一旦输入的流耗尽,read() 将返回 -1。从以这种方式构造的流中读取的数据将包含其中包含的所有 gzip 成员的连接数据。
也可以看看:
“https://tools.ietf.org/html/rfc1952”
Modifier and Type | Method and Description |
---|---|
void | close() Closes the input stream (unless it is System.in). |
long | getCompressedCount() |
GzipParameters | getMetaData() 提供流的元数据 - 解压缩连接流时可能随每个流而变化 |
static boolean | matches(byte[] signature, int length) 检查签名是否与 .gz 文件的预期匹配 |
int | read() |
int | read(byte[] b, int off, int len) |
GzipCompressorOutputStream
public class GzipCompressorOutputStream
extends CompressorOutputStream
使用 gzip 格式的压缩输出流。 此实现通过允许配置压缩级别和标头元数据(文件名、注释、修改时间、操作系统和额外标志)来改进标准 GZIPOutputStream 类。
也可以看看:GZIP File Format Specification
Modifier and Type | Method and Description |
---|---|
void | close() |
void | finish() 完成将压缩数据写入底层流而不关闭它 |
void | flush() |
void | write(byte[] buffer) |
void | write(byte[] buffer, int offset, int length) |
void | write(int b) |
GzipParameters
GZIP 压缩器使用到的参数器
Modifier and Type | Method and Description |
---|---|
int | getBufferSize() 获取用于检索压缩数据的缓冲区的大小 |
String | getComment() |
int | getCompressionLevel() |
String | getFilename() |
long | getModificationTime() |
int | getOperatingSystem() |
void | setBufferSize(int bufferSize) 设置用于从 Deflater 检索压缩数据并写入底层 OutputStream 的缓冲区大小 |
void | setComment(String comment) |
void | setCompressionLevel(int compressionLevel) |
void | setFilename(String fileName) 设置压缩文件的名称 |
void | setModificationTime(long modificationTime) 设置压缩文件的修改时间 |
void | setOperatingSystem(int operatingSystem) 设置进行压缩的操作系统。默认值如下: - 0: FAT file system (MS-DOS, OS/2, NT/Win32) - 1: Amiga - 2: VMS (or OpenVMS) - 3: Unix - 4: VM/CMS - 5: Atari TOS - 6: HPFS file system (OS/2, NT) - 7: Macintosh - 8: Z-System - 9: CP/M - 10: TOPS-20 - 11: NTFS file system (NT) - 12: QDOS - 13: Acorn RISCOS - 255: Unknown |
GzipUtils
GZIP 压缩格式工具代码
Modifier and Type | Method and Description |
---|---|
static String | getCompressedFilename(String fileName) 将给定的文件名映射到使用 gzip 压缩后文件应具有的名称 |
static String | getUncompressedFilename(String fileName) 将 gzip 压缩文件的给定名称映射到解压缩后文件应具有的名称 |
static boolean | isCompressedFilename(String fileName) 检测给定文件名中的常见 gzip 后缀 |
org.apache.commons.compress.compressors.gzip
ChangeSet
ChangeSet 收集并执行对存档的更改。 从多个线程中将删除更改放入此 ChangeSet 中可能会导致冲突。
这个类不是线程安全的
Modifier and Type | Method and Description |
---|---|
void | add(ArchiveEntry pEntry, InputStream pInput) 将新的存档条目添加到存档 |
void | add(ArchiveEntry pEntry, InputStream pInput, boolean replace) 将新的存档条目添加到存档 |
void | delete(String fileName) 从存档中删除具有文件名的文件 |
void | deleteDir(String dirName) 从存档中删除目录树 |
ChangeSetPerformer
对流执行 ChangeSet 操作。 这个类是线程安全的,可以多次使用。 它对 ChangeSet 的副本进行操作。 如果 ChangeSet 发生变化,则必须创建一个新的 Performer。
这个类是不可变的
这个类是线程安全的
Modifier and Type | Method and Description |
---|---|
ChangeSetResults | perform(ArchiveInputStream in, ArchiveOutputStream out) 对输入流执行此 ChangeSet 中收集的所有更改,并将结果流式传输到输出流 |
ChangeSetResults | perform(ZipFile in, ArchiveOutputStream out) 对 ZipFile 执行此 ChangeSet 中收集的所有更改,并将结果流式传输到输出流 |
ChangeSetResults
存储执行的 ChangeSet 操作的结果
Modifier and Type | Method and Description |
---|---|
List[String](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true) | getAddedFromChangeSet() 返回从变更集中添加的文件名列表 |
List[String](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true) | getAddedFromStream() 返回从原始流中添加的文件名列表 |
List[String](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true) | getDeleted() 返回已删除的文件名列表 |
org.apache.commons.compress.java.util.jar
Pack200.Packer
定义用于将 JAR 文件转换为 Pack200 格式的输出流的 API 的接口
Fields
Modifier and Type | Field and Description |
---|---|
static String | CLASS_ATTRIBUTE_PFX 类属性名称的格式 |
static String | CODE_ATTRIBUTE_PFX 代码属性名称的格式 |
static String | DEFLATE_HINT 在输出存档中设置的 deflation 提示 |
static String | EFFORT 压缩档案时使用的指示量 |
static String | ERROR error 的字符串表示形式 |
static String | FALSE false 的字符串表示形式 |
static String | FIELD_ATTRIBUTE_PFX 字段属性名称的格式 |
static String | KEEP keep 的字符串表示形式 |
static String | KEEP_FILE_ORDER 决定是否所有元素都应按其原始顺序传输 |
static String | LATEST latest 的字符串表示形式 |
static String | METHOD_ATTRIBUTE_PFX 方法属性名称的格式 |
static String | MODIFICATION_TIME 如果设置为 LATEST,则它应尝试确定最新的修改时间 |
static String | PASS pass 的字符串表示形式 |
static String | PASS_FILE_PFX 不会被压缩的文件 |
static String | PROGRESS packer 进度百分比 |
static String | SEGMENT_LIMIT 每个归档段的字节数 |
static String | STRIP strip 的字符串表示形式 |
static String | TRUE true 的字符串表示形式 |
static String | UNKNOWN_ATTRIBUTE 遇到未知属性时要采取的操作 |
Methods
Modifier and Type | Method and Description |
---|---|
void | addPropertyChangeListener(PropertyChangeListener listener) 为 PropertyChange 事件添加监听器 |
void | pack(JarFile in, OutputStream out) 将指定的 JAR 文件打包到指定的输出流 |
void | pack(JarInputStream in, OutputStream out) 将指定jar输入流中的数据打包到指定输出流中 |
SortedMap[String](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true),[String](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true) | properties() 返回此 packer 属性的排序映射 |
void | removePropertyChangeListener(PropertyChangeListener listener) 移除监听器 |
Pack200.Unpacker
定义用于将 Pack200 格式的打包流转换为 JAR 文件的 API 的接口。
Fields
Modifier and Type | Field and Description |
---|---|
static String | DEFLATE_HINT 指示 unpacker 是否应忽略所有传输值的字符串,可以用 true 或 false 替换 |
static String | FALSE false 的字符串表示形式 |
static String | KEEP keep 的字符串表示形式 |
static String | PROGRESS 进度百分比 |
static String | TRUE true 的字符串表示形式 |
Methods
Modifier and Type | Method and Description |
---|---|
void | addPropertyChangeListener(PropertyChangeListener listener) 为 PropertyChange 事件添加侦听器 |
SortedMap[String](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true),[String](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true) | properties() 返回此 unpacker 属性的排序映射 |
void | removePropertyChangeListener(PropertyChangeListener listener) 移除监听器 |
void | unpack(File in, JarOutputStream out) 将指定 File 的内容解包到指定的 JAR 输出流 |
void | unpack(InputStream in, JarOutputStream out) 将指定的流解包到指定的 JAR 输出流 |
org.apache.commons.compress.parallel
InputStreamSupplier
提供输入流。 需要实现来支持线程切换。 虽然一个实例不会被多个线程同时访问,但它将由与创建它的线程不同的线程调用。
Modifier and Type | Method and Description |
---|---|
InputStream | get () Supply an input stream for a resource. |
ScatterGatherBackingStore
在分散-收集方案中存储中间有效负载。 多个线程将其有效负载写入后备存储,随后可以将其反转为 InputStream 以用作收集阶段的输入。
关闭它是此类实例的分配器的责任。 关闭它应该清除所有分配的结构,最好删除文件。
Modifier and Type | Method and Description |
---|---|
void | closeForWriting() 关闭此后备存储以供进一步写入 |
InputStream | getInputStream() 包含分散有效负载的输入流 |
void | writeOut(byte[] data, int offset, int length) 写入一段有效载荷 |
ScatterGatherBackingStoreSupplier
Modifier and Type | Method and Description |
---|---|
ScatterGatherBackingStore | get () Create a ScatterGatherBackingStore. |
FileBasedScatterGatherBackingStore
由文件支持的 ScatterGatherBackingStore
Modifier and Type | Method and Description |
---|---|
void | close() |
void | closeForWriting() 关闭此后备存储以供进一步写入 |
InputStream | getInputStream() 包含分散有效负载的输入流 |
void | writeOut(byte[] data, int offset, int length) 写入一段有效载荷 |
org.apache.commons.compress.utils
ArchiveUtils
Modifier and Type | Method and Description |
---|---|
static boolean | isArrayZero(byte[] a, int size) 如果数组的前 N 个字节全为零,则返回 true |
static boolean | isEqual(byte[] buffer1, byte[] buffer2) |
static boolean | isEqual(byte[] buffer1, byte[] buffer2, boolean ignoreTrailingNulls) 比较字节缓冲区,可选择忽略尾随空值 |
static boolean | isEqual(byte[] buffer1, int offset1, int length1, byte[] buffer2, int offset2, int length2) |
static boolean | isEqual(byte[] buffer1, int offset1, int length1, byte[] buffer2, int offset2, int length2, boolean ignoreTrailingNulls) 比较字节缓冲区,可选择忽略尾随空值 |
static boolean | isEqualWithNull(byte[] buffer1, int offset1, int length1, byte[] buffer2, int offset2, int length2) 比较字节缓冲区,忽略尾随空值 |
static boolean | matchAsciiBuffer(String expected, byte[] buffer) 检查缓冲区内容是否与 Ascii 字符串匹配 |
static boolean | matchAsciiBuffer(String expected, byte[] buffer, int offset, int length) 检查缓冲区内容是否与 Ascii 字符串匹配。 |
static String | sanitize(String s) 返回作为参数给出的字符串的“净化”版本,其中净化意味着不可打印的字符已被问号替换,结果不超过 255 个字符 |
static byte[] | toAsciiBytes(String inputString) 将字符串转换为 Ascii 字节数组 |
static String | toAsciiString(byte[] inputBytes) 使用 ASCII 字符集将输入字节数组转换为字符串 |
static String | toAsciiString(byte[] inputBytes, int offset, int length) 使用 ASCII 字符集将输入字节数组转换为字符串 |
static String | toString(ArchiveEntry entry) 生成一个包含名称、isDirectory 设置和条目大小的字符串 |
BitInputStream
从 InputStream 中读取 bits
Modifier and Type | Method and Description |
---|---|
void | alignWithByteBoundary() 丢弃位,直到从字节边界读取下一位 |
long | bitsAvailable() 返回可以从此输入流中读取的位数的估计值,而不会被下一次调用此输入流的方法阻塞 |
int | bitsCached() 返回可以从此输入流中读取而无需从基础输入流中读取的位数 |
void | clearBitCache() 清除已从基础流中读取但尚未通过 readBits(int) 提供的位缓存 |
void | close() |
long | getBytesRead() 返回从基础流中读取的字节数 |
long | readBits(int count) 返回从基础流中读取的最多 63 位 |
BoundedArchiveInputStream
NIO 支持的有界输入流,用于从中读取预定义的数据量。
该类是线程安全的。
Modifier and Type | Method and Description |
---|---|
int | read() |
int | read(byte[] b, int off, int len) |
protected abstract int | read(long pos, ByteBuffer buf) 将流的内容读入 ByteBuffer |
BoundedInputStream
一种流,它将从包装流中读取的内容限制为给定的字节数。
Modifier and Type | Method and Description |
---|---|
void | close() |
long | getBytesRemaining() |
int | read() |
int | read(byte[] b, int off, int len) |
long | skip(long n) |
BoundedSeekableByteChannelInputStream
InputStream 将请求委托给底层的 SeekableByteChannel,确保只能读取特定范围内的字节。
Modifier and Type | Method and Description |
---|---|
protected int | read(long pos, ByteBuffer buf) 将流的内容读入 ByteBuffer |
ByteUtils
Modifier and Type | Method and Description |
---|---|
static long | fromLittleEndian(byte[] bytes) 将给定的字节数组读取为 little endian long |
static long | fromLittleEndian(byte[] bytes, int off, int length) 将给定的字节数组读取为 little endian long |
static long | fromLittleEndian(ByteUtils.ByteSupplier supplier, int length) 从给定的 supplier 读取给定数量的字节作为 little endian long |
static long | fromLittleEndian(DataInput in, int length) 从给定的输入中读取给定的字节数作为 little endian long. |
static long | fromLittleEndian(InputStream in, int length) 从给定的流中读取给定的字节数作为 little endian long |
static void | toLittleEndian(byte[] b, long value, int off, int length) 将给定值作为给定长度的小端序序列插入到数组中,从给定偏移量开始 |
static void | toLittleEndian(ByteUtils.ByteConsumer consumer, long value, int length) 将给定的值作为给定长度的小端序列提供给给定的 consumer |
static void | toLittleEndian(DataOutput out, long value, int length) 将给定值作为给定长度的小端数组写入给定流 |
static void | toLittleEndian(OutputStream out, long value, int length) 将给定值作为给定长度的小端数组写入给定流 |
CharsetNames
Java 平台的每个实现都需要字符编码名称。从 Java 标准字符集文档可知:Java 平台的每个实现都需要支持以下字符编码。
- US-ASCII
七位 ASCII,又名 ISO646-US,又名 Unicode 字符集的基本拉丁语块。
- ISO-8859-1
ISO 拉丁字母 No. 1,又名 ISO-LATIN-1。
- UTF-8
八位 Unicode 转换格式。
- UTF-16BE
十六位 Unicode 转换格式,大端字节序。
- UTF-16LE
十六位 Unicode 转换格式,little-endian 字节顺序。
- UTF-16
十六位 Unicode 转换格式,由强制性初始字节顺序标记指定的字节顺序(输入时接受的顺序,输出时使用大端序。)
这也许最好属于 [lang] 项目。即使在 [lang] 中定义了类似的接口,也无法预见 [compress] 将依赖于 [lang]。
Charsets
Java 平台的每个实现都需要字符集。 从 Java 标准字符集文档可知:Java 平台的每个实现都需要支持以下字符编码。
- US-ASCII
七位 ASCII,又名 ISO646-US,又名 Unicode 字符集的基本拉丁语块。
- ISO-8859-1
ISO 拉丁字母 No. 1,又名 ISO-LATIN-1。
- UTF-8
八位 Unicode 转换格式。
- UTF-16BE
十六位 Unicode 转换格式,大端字节序。
- UTF-16LE
十六位 Unicode 转换格式,little-endian 字节顺序。
- UTF-16
十六位 Unicode 转换格式,由强制性初始字节顺序标记指定的字节顺序(输入时接受的顺序,输出时使用大端序。)
这个类最好属于 Commons Lang 或 IO 项目。 即使在另一个 Commons 组件中定义了类似的类,也不能预见 Commons Compress 会依赖于另一个 Commons 组件。
ChecksumCalculatingInputStream
计算读取数据校验和的流。
Modifier and Type | Method and Description |
---|---|
long | getValue() Returns the calculated checksum. |
int | read() Reads a single byte from the stream |
int | read(byte[] b) Reads a byte array from the stream |
int | read(byte[] b, int off, int len) Reads from the stream into a byte array. |
long | skip(long n) |
ChecksumVerifyingInputStream
流用完后验证读取数据的校验和的流。
Modifier and Type | Method and Description |
---|---|
long | getValue() Returns the calculated checksum. |
int | read() Reads a single byte from the stream |
int | read(byte[] b) Reads a byte array from the stream |
int | read(byte[] b, int off, int len) Reads from the stream into a byte array. |
long | skip(long n) |
CloseShieldFilterInputStream
重新实现 FilterInputStream.close() 什么都不做。
Modifier and Type | Method and Description |
---|---|
void | close() |
CountingInputStream
跟踪读取的字节数的输入流。
该类是非线程安全的。
Modifier and Type | Method and Description |
---|---|
protected void | count(long read) 增加已读取字节的计数器 |
long | getBytesRead() 返回从此流中读取的当前字节数 |
int | read() |
int | read(byte[] b) |
int | read(byte[] b, int off, int len) |
CountingOutputStream
跟踪读取的字节数的输出流。
该类是非线程安全的。
Modifier and Type | Method and Description |
---|---|
protected void | count(long written) 增加已读写出字节的计数器 |
long | getBytesWritten() 返回从此流中写出的当前字节数 |
void | write(byte[] b) |
void | write(byte[] b, int off, int len) |
void | write(int b) |
CRC32VerifyingInputStream
流用完后验证读取数据的 CRC 的流。
该类是非线程安全的。
FileNameUtils
Modifier and Type | Method and Description |
---|---|
static String | getBaseName(String filename) 返回文件名的最后一个路径段的基本名称(即直到但不包括最后一个“.”的部分)。 如果它不包含任何点,将返回文件名本身。 文件名参数的所有前导目录都被跳过。 |
static String | getExtension(String filename) 返回扩展名(即最后一个“.”之后的部分)。如果文件名不包含任何点,将返回一个空字符串。 仅查询文件名的最后一段 - 即跳过文件名参数的所有前导目录。 |
FixedLengthBlockOutputStream
public class FixedLengthBlockOutputStream
extends OutputStream
implements WritableByteChannel
此类支持以固定长度块写入 OutputStream 或 WritableByteChannel。
它可用于支持输出到需要以这种格式输出的设备,例如磁带驱动器。 如果最终块没有足够的内容来填充整个块,则输出将被填充到完整的块大小。
此类可用于支持 TAR、PAX 和 CPIO 阻塞输出到字符特殊设备。 除非写入此类设备,否则不建议使用此类,因为在这种情况下填充没有用处。
此类通常应直接包装 FileOutputStream 或关联的 WritableByteChannel。 如果有一个干预过滤器修改了输出,例如 CompressorOutputStream,或执行其自己的缓冲,例如 BufferedOutputStream,则到设备的输出可能不再具有指定大小。
写入此流的任何内容都应该是自定界的,并且应该容忍为填充最后一个块而添加的任何填充。
Modifier and Type | Method and Description |
---|---|
void | close() |
void | flushBlock() 潜在地填充然后将当前块写入底层流 |
boolean | isOpen() |
void | write(byte[] b, int offset, int length) |
int | write(ByteBuffer src) |
void | write(int b) |
FlushShieldFilterOutputStream
重新实现 FilterOutputStream.flush() 什么都不做。
Modifier and Type | Method and Description |
---|---|
void | flush() |
IOUtils
这个类是不可变的(具有可变数据,但它是只写的)
Modifier and Type | Method and Description |
---|---|
static void | closeQuietly(Closeable c) 关闭给定的 Closeable 并静默任何可能发生的 IOException |
static void | copy(File sourceFile, OutputStream outputStream) 将源文件复制到给定的输出流 |
static long | copy(InputStream input, OutputStream output) 将 InputStream 的内容复制到 OutputStream 中 |
static long | copy(InputStream input, OutputStream output, int buffersize) 将 InputStream 的内容复制到 OutputStream |
static long | copyRange(InputStream input, long len, OutputStream output) 将 InputStream 的部分内容复制到 OutputStream 中 |
static long | copyRange(InputStream input, long len, OutputStream output, int buffersize) 将 InputStream 的部分内容复制到 OutputStream |
static int | read(File file, byte[] array) 从文件中读取尽可能多的内容以填充给定的数组 |
static int | readFully(InputStream input, byte[] array) 尽可能多地从输入中读取以填充给定的数组 |
static int | readFully(InputStream input, byte[] array, int offset, int len) 从输入中读取尽可能多的内容,以用给定的字节数填充给定的数组 |
static void | readFully(ReadableByteChannel channel, ByteBuffer b) 从当前通道的位置开始从给定通道读取 b.remaining() 字节 |
static byte[] | readRange(InputStream input, int len) 以 byte[] 形式获取 InputStream 的部分内容 |
static byte[] | readRange(ReadableByteChannel input, int len) 以 byte[] 形式获取 ReadableByteChannel 的部分内容 |
static long | skip(InputStream input, long numToSkip) 如有必要,通过在给定的输入流上重复调用 skip 来跳过给定的字节数 |
static byte[] | toByteArray(InputStream input) 以 byte[] 形式获取 InputStream 的内容 |
Lists
Modifier and Type | Method and Description |
---|---|
static |
newArrayList() Creates a new ArrayList. |
static |
newArrayList(Iterator<? extends E> iterator) 创建一个新的 ArrayList 填充给定迭代器的内容 |
MultiReadOnlySeekableByteChannel
public class MultiReadOnlySeekableByteChannel
extends Object
implements SeekableByteChannel
连接其他 SeekableByteChannel 集合的 SeekableByteChannel 的只读实现。
这是 Tim Underwood 的 MultiReadOnlySeekableByteChannel 的丢失端口。
Modifier and Type | Method and Description |
---|---|
void | close() |
static SeekableByteChannel | forFiles(File… files) 连接给定的文件 |
static SeekableByteChannel | forSeekableByteChannels(SeekableByteChannel… channels) 连接给定的通道 |
boolean | isOpen() |
long | position() 返回此通道的位置 |
SeekableByteChannel | position(long newPosition) |
SeekableByteChannel | position(long channelNumber, long relativeOffset) 根据给定的通道号和相对偏移设置位置 |
int | read(ByteBuffer dst) |
long | size() |
SeekableByteChannel | truncate(long size) |
int | write(ByteBuffer src) |
OsgiUtils
用于处理 OSGi 环境的工具类。
Modifier and Type | Method and Description |
---|---|
static boolean | isRunningInOsgiEnvironment() 测试 Commons Compress 是否作为 OSGi 包运行? |
SeekableInMemoryByteChannel
public class SeekableInMemoryByteChannel
extends Object
implements SeekableByteChannel
包装 byte[] 的 SeekableByteChannel 实现。
当此通道用于写入时,内部缓冲区会增长以容纳传入数据。 自然大小限制是 Integer.MAX_VALUE 的值,不能将位置或截断设置为大于该值的值。 可以通过 array() 访问内部缓冲区。
Modifier and Type | Method and Description |
---|---|
byte[] | array() 获取支持此通道的数组 |
void | close() |
boolean | isOpen() |
long | position() 返回此通道的位置 |
SeekableByteChannel | position(long newPosition) |
int | read(ByteBuffer buf) |
long | size() 返回此通道连接到的实体的当前大小 |
SeekableByteChannel | truncate(long newSize) 将此通道连接到的实体截断为给定大小 |
int | write(ByteBuffer b) |
ServiceLoaderIterator
通过标准的 ServiceLoader 机制迭代给定类的所有服务.
Modifier and Type | Method and Description |
---|---|
boolean | hasNext() |
E | next() |
void | remove() |
Sets
Modifier and Type | Method and Description |
---|---|
static |
newHashSet(E… elements) 创建一个用给定元素填充的新 HashSet |
SkipShieldingInputStream
public class SkipShieldingInputStream
extends FilterInputStream
一个重写 skip(long) 并委托给 FilterInputStream.read() 的包装器。
InputStream 的一些实现以某种方式实现 InputStream.skip(long),如果流不可搜索,则抛出异常 - 众所周知,System.in 会以这种方式运行。 对于这样的流,根本不可能调用skip,而您必须从流中读取(并丢弃读取的数据)。 跳过可能比阅读要快得多,因此我们确实希望在可能的情况下调用跳过。 我们提供了此类,因此如果您遇到跳过抛出异常的问题,您可以将自己的 InputStream 包装在其中。
Modifier and Type | Method and Description |
---|---|
long | skip(long n) |