面对java.util.zip.ZipException:无效的位长重复

时间:2016-01-06 14:36:44

标签: java base64 gzipinputstream

我有大量的Base64编码Gzip数据存储在tomcat临时文件夹中的.tmp文件中。此数据最初是gzip压缩文本数据。我需要能够读取这些编码数据的块,解码它,然后使用GZIPInputStream解压缩它。但是我得到了这个ZipException:zis.read(decodingChunk)上的无效位长度重复异常。我正在使用apache-commons-codec 1.10中的Base64InputStream。请分享您的专家建议以克服此问题。

Base64InputStream b64is = new Base64InputStream(
             Files.newInputStream(tempFile2, StandardOpenOption.READ));

GZIPInputStream zis = new GZIPInputStream(b64is);

Path tempFile3 = Files.createTempFile("Decodedfile", ".tmp");

BufferedOutputStream decodedStream = new BufferedOutputStream(
  Files.newOutputStream(tempFile3, 
                        StandardOpenOption.CREATE, StandardOpenOption.APPEND), BUFFER);

int count1;
byte[] decodedChunk = new byte[512]; 

while ((count1 = zis.read(decodedChunk)) != -1) {   // ZipException here
    System.out.println("\n zis count : %d " + count1); 
    decodedStream.write(decodedChunk, 0, count1);
}

decodedStream.flush();
decodedStream.close();
zis.close();    
b64is.close();

错误堆栈跟踪 -

   java.util.zip.ZipException: invalid bit length repeat
   at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164)
   at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:116)
   at it.customercare.WebDetails.GenerateOrgUserReport.getUsersReport
     (GenerateOrgUserReport.java:420)
   at it.customercare.WebDetails.HostContactAPIClient.callAPI
     (HostContactAPIClient.java:52)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at it.customercare.WebDetails.HostContactAPIClient.callAPI
     (HostContactAPIClient.java:52)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke     
     (NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke
     (DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:606)
   at org.glassfish.jersey.server.model.internal.
      ResourceMethodInvocationHandlerFactory$1.invoke
      (ResourceMethodInvocationHandlerFactory.java:81)
   at org.glassfish.jersey.server.model.internal.
      AbstractJavaResourceMethodDispatcher$1.run
      (AbstractJavaResourceMethodDispatcher.java:144)
   at org.glassfish.jersey.server.model.internal.
      AbstractJavaResourceMethodDispatcher.invoke
      (AbstractJavaResourceMethodDispatcher.java:161)
   at org.glassfish.jersey.server.model.internal.
      JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch
      (JavaResourceMethodDispatcherProvider.java:205)
   at org.glassfish.jersey.server.model.internal.
      AbstractJavaResourceMethodDispatcher.dispatch
      (AbstractJavaResourceMethodDispatcher.java:99)
   at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389)
   at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)
   at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102)
   at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:309)
   at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
   at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
   at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
   at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
   at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
   at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
   at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:292)
   at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1139)
   at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:460)
   at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:386)
   at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:334)
   at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
   at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
   at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
   at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
   at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
   at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)

FailedToInvokeService - 失败。

   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
   at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
   at java.lang.Thread.run(Thread.java:745)

0 个答案:

没有答案