Java 知道包含InputStream getter的ByteArrayOutputStream吗?

Java 知道包含InputStream getter的ByteArrayOutputStream吗?,java,Java,在用字节填充ByteArrayOutputStream,然后创建一个InputStream之后,执行多次。然而,这似乎有点愚蠢,做所有的复制。理想情况下,一旦调用InputStream getter,就应该在ByteArrayOutputStream中设置一个标志,这样写操作就会失败。很容易写: public class ThinkOfADecentName extends ByteArrayOutputStream { public ByteArrayInputStream creat

在用字节填充ByteArrayOutputStream,然后创建一个InputStream之后,执行多次。然而,这似乎有点愚蠢,做所有的复制。理想情况下,一旦调用InputStream getter,就应该在ByteArrayOutputStream中设置一个标志,这样写操作就会失败。

很容易写:

public class ThinkOfADecentName extends ByteArrayOutputStream
{
    public ByteArrayInputStream createInputStream()
    {
        // Uses protected fields
        return new ByteArrayInputStream(buf, 0, count);
    }
}

请注意,对ByteArrayOutputStream的任何进一步写入都可能反映在输入流中,也可能不反映在输入流中,具体取决于是否发生了重新分配以及写入的位置。基本上,我只会在写完文章后才称之为:)

真的有必要吗?某些字节的输入流是一行:

InputStream in = new ByteArrayInputStream(
                   new ByteArrayOutputStream(bytes).toByteArray()));

(使用Jon的解决方案,您不会在内部创建新的字节数组,因此这一行程序可能会稍微慢一点,并使用一些额外的内存。优点:我们不必发明类名;-)

MyByteArrayInputStreamCreatingByteArrayOutputStream呢?:)是的,但是在sux上加上警卫:)我假设额外的内存是问这个问题的目的:“复制这些东西似乎有点愚蠢”