Java Reader pre & post data



是否有一个Reader类(JDK或库),我可以用它来装饰另一个Reader,使新的Reader返回"PREFIX" + everythong of innerReader + "POSTFIX" ?

我想在将Reader返回给调用者之前用页眉和页脚装饰文件内容。

不在标准库中,但请查看http://ostermiller.org/utils/Concat.html看起来很有希望,但是我自己还没有用过。

我代表GreyBeardedGeek的帖子建立了这个,也许有人可以使用它:

/**
 * Utility <code>Reader</code> implementation which joins one or more other <code>Reader</code> to appear as one.
 */
public class CompositeReader extends Reader {
/** Logger. */
private final static Logger log = LoggerFactory.getLogger(CompositeReader.class);
/** List of readers (in order). */
private final Reader[] readers;
/** Current index. */
private int index;
/**
 * @param readers ordered list of <code>Reader</code> to read from.
 */
public CompositeReader(final Reader... readers) {
    checkArgument(readers.length > 0, "Argument readers must not be empty.");
    this.readers = readers;
    index = 0;
}
@Override
public int read(final char[] cbuf, final int off, final int len) throws IOException {
    int read = 0;
    while (read < len && index != readers.length) {
        final Reader reader = readers[index];
        final int readFromReader = reader.read(cbuf, off + read, len - read);
        if (readFromReader == -1) {
            ++index;
        } else {
            read += readFromReader;
        }
    }
    if (read == 0) {
        return -1;
    }
    return read;
}
@Override
public void close() throws IOException {
    IOException firstException = null;
    for (final Reader reader : readers) {
        try {
            reader.close();
        } catch (final IOException ex) {
            if (firstException != null) {
                log.warn("Multiple readers could not be closed, only first exception will be thrown.");
                firstException = ex;
            }
        }
    }
    if (firstException != null) {
        throw firstException;
    }
}
}

给你:

最新更新