gpt4 book ai didi

java - 从 Android 上的 ZipArchiveInputStream 解压符号链接(symbolic link)

转载 作者:行者123 更新时间:2023-11-30 11:25:38 25 4
gpt4 key购买 nike

我在使用 apache commons-compress-1.6 库从 Android 上的 zip 存档中解压缩符号链接(symbolic link)时遇到了麻烦。

当我得到 ZipArchiveEntry 时,有一个名为 isUnixSymlink() 的方法告诉我该文件是否是符号链接(symbolic link),但它始终返回 false。

InputStream inputStream = new FileInputStream(archive);
ZipArchiveInputStream zipInputStream = new ZipArchiveInputStream(inputStream);
ZipArchiveEntry ze = null;

while ((ze = zipInputStream.getNextZipEntry()) != null) {
File path = new File("/tmp/user/folder", ze.getName());
byte[] extras = ze.getExtra();
boolean isSymlink = ze.isUnixSymlink();

我阅读了位于此处的文档:http://www.pkware.com/documents/casestudies/APPNOTE.TXT ,他们在“4.5 可扩展数据字段”一章中谈论额外信息。额外的应该开始

header id 有 2 个字节(在我的例子中应该是“0x000d UNIX”

还有2个字节的数据大小

但前两个字节总是 [85, 84],在我得到字节数组 [9, 0] 之后。

也许这就是 ZipArchiveEntry 无法返回良好 boolean 值的原因。有人可以给我一些关于那个案例的解释吗?

提前致谢。

最佳答案

我遇到了同样的问题。事实证明,ZipArchiveInputStream 带有以下注意事项(强调我的):

The ZipFile class is preferred when reading from files as ZipArchiveInputStream is limited by not being able to read the central directory header before returning entries. In particular ZipArchiveInputStream

  • may return entries that are not part of the central directory at all and shouldn't be considered part of the archive.
  • may return several entries with the same name.
  • will not return internal or external attributes.
  • may return incomplete extra field data.
  • may return unknown sizes and CRC values for entries until the next entry has been reached if the archive uses the data descriptor feature.

虽然这个问题专门询问关于 ZipArchiveInputStream 的问题,但我认为我会分享切换到 ZipFile 为我解决了这个问题。

关于java - 从 Android 上的 ZipArchiveInputStream 解压符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20220256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com