Java Reader pre&;发布数据

Java Reader pre&;发布数据,java,decorator,bufferedreader,streamreader,Java,Decorator,Bufferedreader,Streamreader,是否有一个Reader类(JDK或库)可以用来修饰另一个Reader,使新的Reader返回“PREFIX”+innerReader的所有内容+“POSTFIX” 在将读取器返回给调用者之前,我想用页眉和页脚装饰文件内容。不在标准库中,但请查看 看起来很有希望,但我自己没用过。我是代表灰胡子极客的帖子做的,也许有人可以用它: /** * Utility <code>Reader</code> implementation which joins one or more

是否有一个Reader类(JDK或库)可以用来修饰另一个Reader,使新的Reader返回
“PREFIX”+innerReader的所有内容+“POSTFIX”


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

不在标准库中,但请查看
看起来很有希望,但我自己没用过。

我是代表灰胡子极客的帖子做的,也许有人可以用它:

/**
 * 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;
    }
}
}
给你:-)