- - PR -
zip解凍について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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) | ||||
|
投稿日時: 2005-03-04 01:10
って言ってるから、解凍対象のファイル(データ)に問題があるんじゃないですか? | ||||
|
投稿日時: 2005-03-04 02:23
データがおかしいかどうかを確認する方法はありますか?
| ||||
|
投稿日時: 2005-03-04 02:53
zipのフォーマットを勉強してバイナリエディタで確認して・・・・というのはあまりに重いですから他の解凍ツールで解凍できるかいくつか試してみてはいかがでしょうか。
また、問題を明確に切り分けるため サーブレット/JSP と切り離した単体テストケースを作った方が効率的にデバッグできるかと思います。 [ メッセージ編集済み 編集者: インギ 編集日時 2005-03-04 02:54 ] | ||||
|
投稿日時: 2005-03-04 02:55
バイナリにまでは出しました
ただzlibデータの仕様がよく分からなくて、、、 ファイルじゃなくzlibのストリームなので解凍することが出来ません | ||||
|
投稿日時: 2005-03-04 03:37
InflaterInputStream.java の 140行目とデータを見比べて、 InflaterInputStream がどういったデータを期待しているのか確認してみてはいかがでしょうか。
| ||||
|
投稿日時: 2005-03-04 05:37
InflaterInputStream.javaはどうやったら見られるのかわかりません
Sunのサイトとかで見られたりするんでしょうか? | ||||
|
投稿日時: 2005-03-04 06:18
確か JDK のインストール時に選択するんだったと思いますが、インストールされていれば jdk のホームディレクトリ直下に src.zip というのがあると思います。
それを解凍すると確認できます ![]() |