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