如何获取空"unwritten"流的大小?



我有一个以固定大小创建的流。缓冲区为空。我希望能够获取此缓冲区的大小。什么是有效的方法?

这是我所做的。

static OutputStream CreateBuffer()
{
    return (OutputStream) new ByteArrayOutputStream(100);
}
static int GetBufferSize(OutputStream out)
{
    return ( (ByteArrayOutputStream) out).size();
}

public static void main(String[] args)
{
    System.out.println(GetBufferSize(CreateBuffer()));
}

我希望100.我知道为什么它是 0 - 流只是分配的,但实际上还没有写入它。在不实际复制数据的情况下获取空输出流的大小的良好实现是什么?

您可以通过子类化ByteArrayOutputStream来获取内部缓冲区大小:

private static class ByteArrayOutputStreamWithCapacity extends ByteArrayOutputStream {
    public ByteArrayOutputStreamWithCapacity(int size) {
        super(size);
    }
    public synchronized int capacity() {
        return buf.length;
    }
}
void CreateBuffer()
{
    OutputStream out = new ByteArrayOutputStreamWithCapacity(100);
}
int GetBufferSize(OutPutStream out)
{
    return ( (ByteArrayOutputStreamWithCapacity) out). capacity();
}

我有一个以固定大小创建的java.io.OutputStream

不,你没有。您有一个使用非零初始容量创建的ByteArrayOutputStream

缓冲区为空。我希望能够获取此缓冲区的大小。

缓冲区的逻辑大小为零。缓冲区的初始容量是您在构造函数中指定的任何容量。

什么是

有效的方法?

记住您在构造函数中指定的内容。

我预计100。

你应该期望零。参见Javadoc。

我知道为什么它是 0 - 流只是分配的,但实际上还没有写入它。

完全。所以为什么你期望100是一个谜。

在不实际复制数据的情况下获取空输出流的大小的良好实现是什么?

"空输出流的大小"为零。ByteArrayOutputStream的初始容量是您在构建它时指定的任何容量。不清楚你为什么认为你需要这个。容量将根据需要有效更改。您似乎在"固定大小"和"初始容量"之间感到困惑。你指定的是后者。

相关内容

  • 没有找到相关文章

最新更新