2016-07-13 7 views
-2

固定サイズで作成されたストリームがあります。バッファは空です。 このバッファのサイズを取得できます。これを行う効率的な方法は何ですか?空の "未書き込み"ストリームのサイズを取得する方法は?

ここに私が行ったことがあります。

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であるのか知っています - ストリームは割り当てられただけですが、実際にまだ何も書き込まれていません。実際にデータをコピーせずに空の出力ストリームのサイズを取得するにはどうすればよいでしょうか?

+1

あなたが100を出ようと思っているなら、あなたが求めていることは不可能だと確信しています。バニラのByteArrayOutputStreamではなく、邪悪な反射のハッピーなしではありません。 APIは、この質問に答えることを避けるために特別に設計されています。 –

+1

質問に答えを入れないでください。 – shmosel

+0

それは間違いでした。私は適切なforamttingで更新していた、間違ったバージョンを追加しました。修正されました。ありがとうございました。 – nikk

答えて

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(); 
} 
+0

ありがとうございます。ちょうど私が必要なもの。乾杯。 – nikk

+1

@nikkこれは技術的に*あなたの質問に答えるが、EJPの答えで説明されているように、実際にこれが必要かどうかは非常に疑問だ。ありがとう。 – shmosel

+0

答えは私の問題を解決します。私はちょうど私のアプリケーションのためにそのサイズを取得する必要がありました。ありがとうございました。 – nikk

1

私は固定サイズで作成されたjava.io.OutputStreamを持っています。

いいえ。ゼロ以外の初期容量で作成されたByteArrayOutputStreamがあります。

バッファが空です。私はこのバッファのサイズを取得できるようにしたい。

バッファの論理サイズはゼロです。バッファーの初期容量は、コンストラクターで指定したものと同じです。

効率的な方法は何ですか?

コンストラクタで指定した内容を覚えておいてください。

私はあなたがゼロを期待するべきである100

を期待しています。 Javadocを参照してください。

私はストリームが割り当てられているにもかかわらず、何も実際にまだ書き込まれていないことを知っています。

正確に。だからあなたはなぜ100が謎であると思ったのですか?

実際にデータをコピーせずに空の出力ストリームのサイズを取得するにはどうすればよいでしょうか?

'空の出力ストリームのサイズ'はゼロです。 ByteArrayOutputStreamの初期容量は、それを構成するときに指定したものです。なぜあなたはこれが必要だと思うか不明です。容量は必要に応じて効率的に変化します。あなたは '固定サイズ'と '初期容量'の間で混乱しているようです。あなたが指定したのは後者でした。

関連する問題