我有一个以固定大小创建的流。缓冲区为空。我希望能够获取此缓冲区的大小。什么是有效的方法?
这是我所做的。
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
的初始容量是您在构建它时指定的任何容量。不清楚你为什么认为你需要这个。容量将根据需要有效更改。您似乎在"固定大小"和"初始容量"之间感到困惑。你指定的是后者。