从归档打开文件而不进行临时提取

现在我正在开发一个存档浏览应用程序,它允许用户浏览存档内容,提取存档并预览存档中的文件。 我正在使用java.util.zip API。 要预览文件,我暂时将其解压缩并将其作为通常的现有文件打开。 您可能已经理解,这不是一个好方法,因为如果没有足够的空间来进行临时提取,它将不会预览文件。 是否有一个工作解决方案将ZipInputStream传递给Activity以将其作为文件打开? 这个问题还有另一种解决方法吗? 提前致谢。

原则上,您可以创建一个提供ZipInputStreamContentProvider

在这个示例项目中,我演示了如何创建一个支持openFile()ContentProvider ,它使用ParcelFileDescriptor.createPipe()创建的管道来提供文件。 createPipe()返回表示管道末端的ParcelFileDescriptors对(双元素数组)。 您使用数组中的第二个元素通过OutputStream写入; openFile()返回Android中要传递给调用进程的数组中的第一个元素。 调用者将使用openInputStream()来读取您通过管道传输的内容。

就我而言,我正在发送一个资产,我通过AssetManager获得一个InputStream 。 在您的情况下,您将使用ZipInputStream

请注意,我的示例项目假设它正在具有PDF查看器的设备上运行,因为它正在从资源中提供PDF并尝试通过startActivity()打开它。