我有一个用固定大小创建的流。缓冲区为空。 我希望能够获得此缓冲区的大小。这样做的有效方法是什么?
这就是我所做的。
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 - 流只是分配但实际上还没有写入它。在没有实际复制数据的情况下获得空输出流大小的良好实现是什么?
答案 0 :(得分:1)
您可以通过继承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();
}
答案 1 :(得分:1)
我创建的
java.io.OutputStream
是固定大小的。
不,你没有。您创建的ByteArrayOutputStream
初始容量为非零。
缓冲区为空。我希望能够获得这个缓冲区的大小。
缓冲区的逻辑大小为零。缓冲区的初始容量是您在构造函数中指定的任何内容。
这样做的有效方法是什么?
记住你在构造函数中指定的内容。
我期待100。
你应该期待零。见Javadoc。
我知道为什么它为0 - 只分配了流,但实际上还没有写入任何内容。
完全。那么为什么你期望100是一个谜。
在没有实际复制数据的情况下获取空输出流的大小有什么好的实现?
'空输出流的大小'是零。 ByteArrayOutputStream
的初始容量是您在构造时指定的任何内容。不清楚为什么你认为你需要这个。容量将根据需要有效地改变。你好像在固定尺寸和#39;之间感到困惑。和'初始容量'。你指定的是后者。