- PR -

zip解凍について

投稿者投稿内容
aco0000
会議室デビュー日: 2004/09/16
投稿数: 18
投稿日時: 2005-03-03 23:33
以下のような感じでZipデータを解凍してるんですが、できるときと
出来ないときがあります。
出来ないときには「ZipException」が出るのですが、何が原因なのか
よくわかりません。
Zipデータはファイルではなく、Zip圧縮されたデータです。
-----------------
java.util.zip.Inflater inflt = new java.util.zip.Inflater();
InflaterInputStream in = new InflaterInputStream(sis,inflt,zlen);
ByteArrayOutputStream inflatedOut = new ByteArrayOutputStream();
int readLength;
while(inflt.getTotalIn()<zlen){
byte[] block = new byte[8192];
if((readLength = in.read(block,0,1)) == -1){ break; }
inflatedOut.write(block, 0, readLength);
}
inflatedOut.flush();
byte[] datas = inflatedOut.toByteArray();
inflt.reset();
inflt.end();
-----------------
StandardWrapperValve[jsp]: サーブレット jsp のServlet.service()が例外を投げました
java.util.zip.ZipException: unknown compression method
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:140)
at org.apache.jsp.hogehoge_jsp._jspService(hogehoge.java:349)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:298)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:296)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:372)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:694)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:626)
at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:807)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:644)
at java.lang.Thread.run(Thread.java:595)
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2005-03-04 01:10
引用:

aco0000さんの書き込み (2005-03-03 23:33) より:

java.util.zip.ZipException: unknown compression method




って言ってるから、解凍対象のファイル(データ)に問題があるんじゃないですか?
aco0000
会議室デビュー日: 2004/09/16
投稿数: 18
投稿日時: 2005-03-04 02:23
データがおかしいかどうかを確認する方法はありますか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-03-04 02:53
zipのフォーマットを勉強してバイナリエディタで確認して・・・・というのはあまりに重いですから他の解凍ツールで解凍できるかいくつか試してみてはいかがでしょうか。
また、問題を明確に切り分けるため サーブレット/JSP と切り離した単体テストケースを作った方が効率的にデバッグできるかと思います。

[ メッセージ編集済み 編集者: インギ 編集日時 2005-03-04 02:54 ]
aco0000
会議室デビュー日: 2004/09/16
投稿数: 18
投稿日時: 2005-03-04 02:55
バイナリにまでは出しました
ただzlibデータの仕様がよく分からなくて、、、
ファイルじゃなくzlibのストリームなので解凍することが出来ません
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-03-04 03:37
InflaterInputStream.java の 140行目とデータを見比べて、 InflaterInputStream がどういったデータを期待しているのか確認してみてはいかがでしょうか。
aco0000
会議室デビュー日: 2004/09/16
投稿数: 18
投稿日時: 2005-03-04 05:37
InflaterInputStream.javaはどうやったら見られるのかわかりません
Sunのサイトとかで見られたりするんでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-03-04 06:18
確か JDK のインストール時に選択するんだったと思いますが、インストールされていれば jdk のホームディレクトリ直下に src.zip というのがあると思います。
それを解凍すると確認できます

スキルアップ/キャリアアップ(JOB@IT)