mobile/android/thirdparty/ch/boye/httpclientandroidlib/client/entity/DecompressingEntity.java

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

     1 /*
     2  * ====================================================================
     3  *
     4  *  Licensed to the Apache Software Foundation (ASF) under one or more
     5  *  contributor license agreements.  See the NOTICE file distributed with
     6  *  this work for additional information regarding copyright ownership.
     7  *  The ASF licenses this file to You under the Apache License, Version 2.0
     8  *  (the "License"); you may not use this file except in compliance with
     9  *  the License.  You may obtain a copy of the License at
    10  *
    11  *      http://www.apache.org/licenses/LICENSE-2.0
    12  *
    13  *  Unless required by applicable law or agreed to in writing, software
    14  *  distributed under the License is distributed on an "AS IS" BASIS,
    15  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    16  *  See the License for the specific language governing permissions and
    17  *  limitations under the License.
    18  * ====================================================================
    19  *
    20  * This software consists of voluntary contributions made by many
    21  * individuals on behalf of the Apache Software Foundation.  For more
    22  * information on the Apache Software Foundation, please see
    23  * <http://www.apache.org/>.
    24  *
    25  */
    26 package ch.boye.httpclientandroidlib.client.entity;
    28 import java.io.IOException;
    29 import java.io.InputStream;
    30 import java.io.OutputStream;
    32 import ch.boye.httpclientandroidlib.HttpEntity;
    33 import ch.boye.httpclientandroidlib.entity.HttpEntityWrapper;
    35 /**
    36  * Common base class for decompressing {@link HttpEntity} implementations.
    37  *
    38  * @since 4.1
    39  */
    40 abstract class DecompressingEntity extends HttpEntityWrapper {
    42     /**
    43      * Default buffer size.
    44      */
    45     private static final int BUFFER_SIZE = 1024 * 2;
    47     /**
    48      * DecompressingEntities are not repeatable, so they will return the same
    49      * InputStream instance when {@link #getContent()} is called.
    50      */
    51     private InputStream content;
    53     /**
    54      * Creates a new {@link DecompressingEntity}.
    55      *
    56      * @param wrapped
    57      *            the non-null {@link HttpEntity} to be wrapped
    58      */
    59     public DecompressingEntity(final HttpEntity wrapped) {
    60         super(wrapped);
    61     }
    63     abstract InputStream getDecompressingInputStream(final InputStream wrapped) throws IOException;
    65     /**
    66      * {@inheritDoc}
    67      */
    68     @Override
    69     public InputStream getContent() throws IOException {
    70         if (wrappedEntity.isStreaming()) {
    71             if (content == null) {
    72                 content = getDecompressingInputStream(wrappedEntity.getContent());
    73             }
    74             return content;
    75         } else {
    76             return getDecompressingInputStream(wrappedEntity.getContent());
    77         }
    78     }
    80     /**
    81      * {@inheritDoc}
    82      */
    83     @Override
    84     public void writeTo(OutputStream outstream) throws IOException {
    85         if (outstream == null) {
    86             throw new IllegalArgumentException("Output stream may not be null");
    87         }
    88         InputStream instream = getContent();
    89         try {
    90             byte[] buffer = new byte[BUFFER_SIZE];
    92             int l;
    94             while ((l = instream.read(buffer)) != -1) {
    95                 outstream.write(buffer, 0, l);
    96             }
    97         } finally {
    98             instream.close();
    99         }
   100     }
   102 }

mercurial