14ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/**************************************************************** 24ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Licensed to the Apache Software Foundation (ASF) under one * 34ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * or more contributor license agreements. See the NOTICE file * 44ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * distributed with this work for additional information * 54ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * regarding copyright ownership. The ASF licenses this file * 64ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * to you under the Apache License, Version 2.0 (the * 74ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * "License"); you may not use this file except in compliance * 84ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * with the License. You may obtain a copy of the License at * 94ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * * 104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * http://www.apache.org/licenses/LICENSE-2.0 * 114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * * 124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Unless required by applicable law or agreed to in writing, * 134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * software distributed under the License is distributed on an * 144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * 154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * KIND, either express or implied. See the License for the * 164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * specific language governing permissions and limitations * 174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * under the License. * 184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira ****************************************************************/ 194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapackage org.apache.james.mime4j.util; 224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.InputStream; 244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.IOException; 254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapublic class PartialInputStream extends PositionInputStream { 274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira private final long limit; 284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public PartialInputStream(InputStream inputStream, long offset, long length) throws IOException { 304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira super(inputStream); 314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira inputStream.skip(offset); 324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.limit = offset + length; 334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public int available() throws IOException { 364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return Math.min(super.available(), getBytesLeft()); 374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public int read() throws IOException { 404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (limit > position) 414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return super.read(); 424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira else 434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return -1; 444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public int read(byte b[]) throws IOException { 474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return read(b, 0, b.length); 484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public int read(byte b[], int off, int len) throws IOException { 514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira len = Math.min(len, getBytesLeft()); 524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return super.read(b, off, len); //To change body of overridden methods use File | Settings | File Templates. 534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public long skip(long n) throws IOException { 564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira n = Math.min(n, getBytesLeft()); 574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return super.skip(n); //To change body of overridden methods use File | Settings | File Templates. 584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira private int getBytesLeft() { 614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return (int)Math.min(Integer.MAX_VALUE, limit - position); 624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira} 64