You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Stefan Bodewig (Jira)" <ji...@apache.org> on 2020/04/07 05:55:00 UTC

[jira] [Commented] (COMPRESS-508) Provide an API that can read ZIP archives in two passes over a stream

    [ https://issues.apache.org/jira/browse/COMPRESS-508?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17076942#comment-17076942 ] 

Stefan Bodewig commented on COMPRESS-508:
-----------------------------------------

Yes, STORED means no compression at all. It is completely trivial to deal with it if you know how big the original entry has been, but in your archive this is not the case - unless you read bytes after the content of the entry.

bq. Can you please offer something that would be able to go over the content twice (or more) using InputStream to get the same functionality of reading each of the entries?

I hope you realize that [~peterlee] as well as myself are working on Compress as a hobby in our spare time.

 

> Provide an API that can read ZIP archives in two passes over a stream
> ---------------------------------------------------------------------
>
>                 Key: COMPRESS-508
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-508
>             Project: Commons Compress
>          Issue Type: Improvement
>          Components: Archivers
>    Affects Versions: 1.20
>         Environment: Android 9 and Android 10, on both emulator and real device .
>            Reporter: AD_LB
>            Priority: Major
>              Labels: zip
>         Attachments: 2020-03-31_20-53-36.png, 2020-04-01_18-28-19.mp4, ZipTest.zip, ZipTest2.zip, ZipTest3.zip, test.zip
>
>
> I'm trying to use ZipArchiveInputStream to iterate over the items of a zip file (which may or may not be a real file on the file-system, which is why I use a stream), optionally creating a stream from specific entries.
> One of the operations I need is to get the size of the files within.
> For some reason, it fails to do so. Not only that, but it throws an exception when I'm done with it:
> {code:java}
> Error:org.apache.commons.compress.archivers.zip.UnsupportedZipFeatureException: Unsupported feature data descriptor used in entry ...
> {code}
> I've attached here 3 files:sample project, the problematic zip file (remember that you need to put it in the correct path and grant storage permission), and a screenshot of the issue.
> Note that if I open the file using a third party PC app (such as [7-zip|https://www.7-zip.org/]  ), it works fine, including showing the file size inside.
> Files:
> !2020-03-31_20-53-36.png![^test.zip]
> [^ZipTest.zip]
> Here's the relevant code (kotlin) :
>  
> {code:java}
>         thread {
>             try {
>                 val file = File("/storage/emulated/0/test.zip")
>                 ZipArchiveInputStream(FileInputStream(file)).use {
>                     while (true) {
>                         val entry = it.nextEntry ?: break
>                         Log.d("AppLog", "entry:${entry.name} ${entry.size} ")
>                     }
>                 }
>                 Log.d("AppLog", "got archive ")
>             } catch (e: Exception) {
>                 Log.d("AppLog", "Error:$e")
>                 e.printStackTrace()
>             }
>         }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)