2012-03-25 20 views
0

私の.gzファイルを解凍してdbファイルを上書きしようとすると、不明なフォーマット(マジックナンバー5153)が表示されます。ここでは、解凍と上書きのための私のコードです。不明な形式(マジックナンバー5153)

  InputStream fIn = c.getAssets().open("MyContacts"); 
     // Path to the just created empty db 
     String outFileName = DB_PATH + DB_NAME; 

     //Open the empty db as the output stream 
     FileOutputStream myOutput = new FileOutputStream(outFileName); 
     GZIPInputStream gz = new GZIPInputStream(fIn); 

     //transfer bytes from the inputfile to the outputfile 
     byte[] buffer = new byte[10246]; 
     int length; 
     while ((length = gz.read(buffer, 0,buffer.length)) != -1){ 
      myOutput.write(buffer, 0, length); 
     } 

     //Close the streams 

     gz.close(); 
     myOutput.flush(); 
     myOutput.close(); 
     fIn.close(); 
+1

コードは大丈夫ですかhttp://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/ – zapl

答えて

1

アセットがコードに到達する前に解凍されている可能性が非常に高いです。 aaptには、圧縮されたアセットファイルの処理方法に関する独自の強力なアイデアがあります。この動作は、アセットファイル名に部分的に(私が知る限り、文書化されていない方法で)依存します。圧縮されていないファイルをassetsディレクトリに置いて、圧縮して圧縮する方がはるかに優れています。それは一般的に優れた仕事をし、このようなことを心配する必要がなくなります。

ザッププのコメントで指摘しているブログ記事を参照してください。

0

それはあなたのファイルの先頭に「SQLiteのフォーマット」の先頭に「SQ」を見つけることですので、あなたの資産は、圧縮されていない(または透過的に解凍されています)。

+0

ファイルが.gz形式です。 –

+0

これはあなたのエラーが言っていることではありません... –

+0

K私は、なぜ私の考えは、APKがMyContactsファイルの.gzタグを取り除いたのかと思っています。私はこれを回避する方法はわかりません。 –

関連する問題