18

をストリームに変換しようとしOutputStreamています。ByteArrayOutputこれを行う方法について、明確で簡単な答えを見つけることができませんでした。この質問は、StackOverflow の質問のタイトルで尋ねられましたが、質問の本文では、 aByteArrayStreamをに変更する方法を尋ねていOuputStreamます。既に作成されたOutputStreamがあり、回答に示されているこの例はコンパイルされません!

その質問はこちら

すでに構築されており、waveHeader と呼ばれる 44 バイトの長さの OutputStream があります。後のプロセスで簡単にするために、これを waveHeader.ToByteArray() で byte[] に変更できるようにしたいので、これを ByteArrayOutputStream に変換したいと思います。

これを可能にする単純なタイプのキャストまたは何かがありますか?

そうでない場合:

  • 変換できない場合、元の OutputStream 内のデータへのポインターを構築する方法はありますか?

  • OutputStream に含まれるデータにアクセスするにはどうすればよいでしょうか?

私はJAVAが初めてです。これは私にとって単なる趣味です。Streams VisualBasic .net では、はるかに簡単です。

4

3 に答える 3

27

考えられるシナリオは複数あります。

a) ByteArrayOutputStream がありますが、OutputStream として宣言されています。次に、次のようなキャストを実行できます。

void doSomething(OutputStream os)
{
    // fails with ClassCastException if it is not a BOS
    ByteArrayOutputStream bos = (ByteArrayOutputStream)os;
...

b) 他のタイプの出力ストリームがある場合、それを BOS に変換しても意味がありません。(結果の配列にアクセスする必要があるため、通常はキャストする必要があります)。したがって、この場合、単純に新しいストリームをセットアップして使用します。

void doSomething(OutputStream os)
{
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    bos.write(something);
    bos.close();
    byte[] arr = bos.toByteArray();
    // what do you want to do?
    os.write(arr); // or: bos.writeTo(os);
...

c) 何らかの種類の OutputStream に何かを書き込んだ場合 (たとえば、サーブレットから取得するため、それが何であるかわからない場合)、その情報を取得する方法はありません。あとで必要なことを書いてはいけません。解決策は、答え b) を独自のストリームに書き込むことであり、実際の出力ストリームに書き込むだけでなく、独自の目的で配列を使用することもできます。

ByteArrayOutputStreams はすべてのデータをメモリに保持することに注意してください。

于 2014-11-16T19:25:27.767 に答える
7

writeToの方法を使用できますByteArrayOutputStream

ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] bytes = new byte[8];
bos.write(bytes);
bos.writeTo(oos);

のインスタンスを作成できますByteArrayOutputStream。次に、このByteOutputStreamインスタンスにデータを書き込む必要があります。次にwriteTo、 を受け入れるメソッドを使用して、引数として渡したインスタンスに出力を書き込むOutputStreamことができるようにします。ByteArrayOutputStreamOutputStream

それがうまくいくことを願っています!

于 2014-11-16T19:25:46.897 に答える
-1

あなたが持っている出力ストリームで関数を使用することtoByteArrayができます.それはあなたがoutputStreamバッファを持っているとしましょうbuffer.toByteArray.

詳細については、 Convert InputStream to byte array in Javaの回答をご覧ください。

于 2014-11-16T19:28:32.733 に答える