Home | History | Annotate | Download | only in compress
      1 /*
      2  * Licensed to the Apache Software Foundation (ASF) under one
      3  * or more contributor license agreements.  See the NOTICE file
      4  * distributed with this work for additional information
      5  * regarding copyright ownership.  The ASF licenses this file
      6  * to you under the Apache License, Version 2.0 (the
      7  * "License"); you may not use this file except in compliance
      8  * with the License.  You may obtain a copy of the License at
      9  *
     10  * http://www.apache.org/licenses/LICENSE-2.0
     11  *
     12  * Unless required by applicable law or agreed to in writing,
     13  * software distributed under the License is distributed on an
     14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
     15  * KIND, either express or implied.  See the License for the
     16  * specific language governing permissions and limitations
     17  * under the License.
     18  */
     19 package org.apache.commons.compress;
     20 
     21 import java.io.IOException;
     22 
     23 /**
     24  * If a stream checks for estimated memory allocation, and the estimate
     25  * goes above the memory limit, this is thrown.  This can also be thrown
     26  * if a stream tries to allocate a byte array that is larger than
     27  * the allowable limit.
     28  *
     29  * @since 1.14
     30  */
     31 public class MemoryLimitException extends IOException {
     32 
     33     private static final long serialVersionUID = 1L;
     34 
     35     //long instead of int to account for overflow for corrupt files
     36     private final long memoryNeededInKb;
     37     private final int memoryLimitInKb;
     38 
     39     public MemoryLimitException(long memoryNeededInKb, int memoryLimitInKb) {
     40         super(buildMessage(memoryNeededInKb, memoryLimitInKb));
     41         this.memoryNeededInKb = memoryNeededInKb;
     42         this.memoryLimitInKb = memoryLimitInKb;
     43     }
     44 
     45     public MemoryLimitException(long memoryNeededInKb, int memoryLimitInKb, Exception e) {
     46         super(buildMessage(memoryNeededInKb, memoryLimitInKb), e);
     47         this.memoryNeededInKb = memoryNeededInKb;
     48         this.memoryLimitInKb = memoryLimitInKb;
     49     }
     50 
     51     public long getMemoryNeededInKb() {
     52         return memoryNeededInKb;
     53     }
     54 
     55     public int getMemoryLimitInKb() {
     56         return memoryLimitInKb;
     57     }
     58 
     59     private static String buildMessage(long memoryNeededInKb, int memoryLimitInKb) {
     60         return memoryNeededInKb + " kb of memory would be needed; limit was "
     61                 + memoryLimitInKb + " kb. " +
     62                 "If the file is not corrupt, consider increasing the memory limit.";
     63     }
     64 }
     65