Java 知道包含InputStream getter的ByteArrayOutputStream吗?
在用字节填充ByteArrayOutputStream,然后创建一个InputStream之后,执行多次。然而,这似乎有点愚蠢,做所有的复制。理想情况下,一旦调用InputStream getter,就应该在ByteArrayOutputStream中设置一个标志,这样写操作就会失败。很容易写:Java 知道包含InputStream getter的ByteArrayOutputStream吗?,java,Java,在用字节填充ByteArrayOutputStream,然后创建一个InputStream之后,执行多次。然而,这似乎有点愚蠢,做所有的复制。理想情况下,一旦调用InputStream getter,就应该在ByteArrayOutputStream中设置一个标志,这样写操作就会失败。很容易写: public class ThinkOfADecentName extends ByteArrayOutputStream { public ByteArrayInputStream creat
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上加上警卫:)我假设额外的内存是问这个问题的目的:“复制这些东西似乎有点愚蠢”