001/**************************************************************** 002 * Licensed to the Apache Software Foundation (ASF) under one * 003 * or more contributor license agreements. See the NOTICE file * 004 * distributed with this work for additional information * 005 * regarding copyright ownership. The ASF licenses this file * 006 * to you under the Apache License, Version 2.0 (the * 007 * "License"); you may not use this file except in compliance * 008 * with the License. You may obtain a copy of the License at * 009 * * 010 * http://www.apache.org/licenses/LICENSE-2.0 * 011 * * 012 * Unless required by applicable law or agreed to in writing, * 013 * software distributed under the License is distributed on an * 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * 015 * KIND, either express or implied. See the License for the * 016 * specific language governing permissions and limitations * 017 * under the License. * 018 ****************************************************************/ 019 020package org.apache.james.mime4j.io; 021 022import org.apache.james.mime4j.util.ByteArrayBuffer; 023 024import java.io.FilterInputStream; 025import java.io.IOException; 026import java.io.InputStream; 027 028/** 029 * Input stream capable of reading lines of text. 030 */ 031public abstract class LineReaderInputStream extends FilterInputStream { 032 033 protected LineReaderInputStream(InputStream in) { 034 super(in); 035 } 036 037 /** 038 * Reads one line of text into the given {@link ByteArrayBuffer}. 039 * 040 * @param dst Destination 041 * @return number of bytes copied or <code>-1</code> if the end of 042 * the stream has been reached. 043 * 044 * @throws MaxLineLimitException if the line exceeds a limit on 045 * the line length imposed by a subclass. 046 * @throws IOException in case of an I/O error. 047 */ 048 public abstract int readLine(final ByteArrayBuffer dst) 049 throws MaxLineLimitException, IOException; 050 051 /** 052 * Tries to unread the last read line. 053 * 054 * Implementation may refuse to unread a new buffer until the previous 055 * unread one has been competely consumed. 056 * 057 * Implementations will directly use the byte array backed by buf, so 058 * make sure to not alter it anymore once this method has been called. 059 * 060 * @return true if the unread has been succesfull. 061 */ 062 public abstract boolean unread(ByteArrayBuffer buf); 063 064}