如何获取空 "unwritten" 流的大小?
How to get the size of an empty "unwritten" stream?
我有一个以固定大小创建的流。缓冲区是空的。
我希望能够得到这个缓冲区的大小。这样做的有效方法是什么?
这是我所做的。
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();
}
I have a java.io.OutputStream
that is created with a fixed size.
不,你不知道。您有一个 ByteArrayOutputStream
是用非零初始容量创建的。
The buffer is empty. I want to be able to get the size of this buffer.
缓冲区的逻辑大小为零。缓冲区的初始容量是您在构造函数中指定的任何值。
What is an efficient way of doing this?
记住您在构造函数中指定的内容。
I expect 100.
你应该期待零。请参阅 Javadoc。
I know why it is 0 -- the stream was only allocated but nothing has actually been written to it yet.
没错。所以你为什么期望 100 是个谜。
What is a good implementation to get the size of an empty outputstream without actually copying data?
'The size of an empty output stream' 为零。 ByteArrayOutputStream
的初始容量是您在构造它时指定的任何值。不清楚为什么你认为你需要这个。容量将根据需要有效地改变。您似乎混淆了 'fixed size' 和 'initial capacity'。你指定的是后者。
我有一个以固定大小创建的流。缓冲区是空的。 我希望能够得到这个缓冲区的大小。这样做的有效方法是什么?
这是我所做的。
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();
}
I have a
java.io.OutputStream
that is created with a fixed size.
不,你不知道。您有一个 ByteArrayOutputStream
是用非零初始容量创建的。
The buffer is empty. I want to be able to get the size of this buffer.
缓冲区的逻辑大小为零。缓冲区的初始容量是您在构造函数中指定的任何值。
What is an efficient way of doing this?
记住您在构造函数中指定的内容。
I expect 100.
你应该期待零。请参阅 Javadoc。
I know why it is 0 -- the stream was only allocated but nothing has actually been written to it yet.
没错。所以你为什么期望 100 是个谜。
What is a good implementation to get the size of an empty outputstream without actually copying data?
'The size of an empty output stream' 为零。 ByteArrayOutputStream
的初始容量是您在构造它时指定的任何值。不清楚为什么你认为你需要这个。容量将根据需要有效地改变。您似乎混淆了 'fixed size' 和 'initial capacity'。你指定的是后者。