2016-12-16 12 views
0

私は、Android 6.0java.util.zip.ZipException:無効な汎用フラグ:9

java.util.zip.ZipException: Invalid General Purpose Bit Flag: 9 java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:253)

でこのエラーを取得し、これは私のコードです:

ZipInputStream zin = new ZipInputStream(getAppContext().getContentResolver().openInputStream(uri)); 

それが何を意味します?私は間違って何をしていますか?ここで

答えて

1

は、ZIPファイルの仕様です:だから

Flags General purpose bit flag: 
Bit 00: encrypted file 
Bit 01: compression option 
Bit 02: compression option 
Bit 03: data descriptor 
Bit 04: enhanced deflation 
Bit 05: compressed patched data 
Bit 06: strong encryption 
Bit 07-10: unused 
Bit 11: language encoding 
Bit 12: reserved 
Bit 13: mask header values 
Bit 14-15: reserved 

、9のGPBF値は、「暗号化ファイル」と設定した「データ記述子」ビットの両方を持っています。

ここでAndroidのソースコードをのぞき見: https://chromium.googlesource.com/android_tools/+/9e9b6169a098bc19986e44fbbf65e4c29031e4bd/sdk/sources/android-22/java/util/zip/ZipFile.java (古いバージョンが、私はこれが変更されていない疑いがある)、これを示しています

static final int GPBF_ENCRYPTED_FLAG = 1 << 0; 

[...]

/** 
* Supported General Purpose Bit Flags Mask. 
* Bit mask of bits not supported. 
* Note: The only bit that we will enforce at this time 
* is the encrypted bit. Although other bits are not supported, 
* we must not enforce them as this could break some legitimate 
* use cases (See http://b/8617715). 
*/ 
static final int GPBF_UNSUPPORTED_MASK = GPBF_ENCRYPTED_FLAG; 

[...]

// At position 6 we find the General Purpose Bit Flag. 
int gpbf = Short.reverseBytes(is.readShort()) & 0xffff; 
if ((gpbf & ZipFile.GPBF_UNSUPPORTED_MASK) != 0) { 
    throw new ZipException("Invalid General Purpose Bit Flag: " + gpbf); 
} 

だから、あなたのZIPファイルCL (GPBFのビット00が設定されています)、ZipFile実装は暗号化されたファイルの読み込みをサポートしていません。

+0

特定のファイルが暗号化されていて、それを読み取ることができないと言っていますか? –

+0

はい、それは私に似ています。あなたは、(a)別のユーティリティを使って同じファイルを解凍しようとしましたか、または(b)コードで知られている(暗号化されていない)ファイルを解凍しようとしましたか? –

関連する問題