从归档打开文件而不进行临时提取
现在我正在开发一个存档浏览应用程序,它允许用户浏览存档内容,提取存档并预览存档中的文件。 我正在使用java.util.zip
API。 要预览文件,我暂时将其解压缩并将其作为通常的现有文件打开。 您可能已经理解,这不是一个好方法,因为如果没有足够的空间来进行临时提取,它将不会预览文件。 是否有一个工作解决方案将ZipInputStream
传递给Activity
以将其作为文件打开? 这个问题还有另一种解决方法吗? 提前致谢。
原则上,您可以创建一个提供ZipInputStream
的ContentProvider
。
在这个示例项目中,我演示了如何创建一个支持openFile()
的ContentProvider
,它使用ParcelFileDescriptor.createPipe()
创建的管道来提供文件。 createPipe()
返回表示管道末端的ParcelFileDescriptors
对(双元素数组)。 您使用数组中的第二个元素通过OutputStream
写入; openFile()
返回Android中要传递给调用进程的数组中的第一个元素。 调用者将使用openInputStream()
来读取您通过管道传输的内容。
就我而言,我正在发送一个资产,我通过AssetManager
获得一个InputStream
。 在您的情况下,您将使用ZipInputStream
。
请注意,我的示例项目假设它正在具有PDF查看器的设备上运行,因为它正在从资源中提供PDF并尝试通过startActivity()
打开它。