如何表示空的输入流

2022-09-01 09:24:15

我正在减少这样的流:InputStreams

InputStream total = input.collect(
    Collectors.reducing(
        empty,
        Item::getInputStream, 
        (is1, is2) -> new SequenceInputStream(is1, is2)));

对于身份,我正在使用:InputStream

InputStream empty = new ByteArrayInputStream(new byte[0]);

这有效,但是有没有更好的方法来表示空的?InputStream


答案 1

从Java 11开始,您可以使用静态方法InputStream.nullInputStream()

返回不读取字节的新输入流。返回的流最初处于打开状态。通过调用 close() 方法关闭流。对 close() 的后续调用没有效果。


答案 2

由于只有一个抽象方法,read()InputStream

public abstract int read() throws IOException

返回:
数据的下一个字节,或者是否到达流的末尾。-1

通过匿名子类创建空流很容易。喜欢这个:

InputStream empty = new InputStream() {
    @Override
    public int read() {
        return -1;  // end of stream
    }
};

但不可否认,它比你的空代码更多。ByteArrayInputStream


推荐