OutputStream
をByteArrayOutput
ストリームに変換しようとしています。これを行う方法について、明確で簡単な答えを見つけることができませんでした。この質問はStackOverflowの質問のタイトルで尋ねられましたが、質問の本文ではByteArrayStream
をOuputStream
に変更する方法を尋ねています。既に作成されているOutputStream
があり、回答に示されているこの例はコンパイルされません!
既に構築され、waveHeaderと呼ばれる44バイトの長さのOutputStreamがあります。それをByteArrayOutputStreamに変換したいのは、後のプロセスで簡単にするために、waveHeader.ToByteArray()でそれをbyte []に変更できるようにするためです。
単純なタイプのキャストまたはこれを可能にするものはありますか?
そうでない場合:
変換できない場合、元のOutputStreamのデータへのポインターを作成する方法はありますか?
OutputStreamに含まれるデータにアクセスするにはどうすればよいでしょうか?
私はJavaが初めてです。これは私の趣味です。はるかに簡単なVisualBasic .netのストリーム!
考えられるシナリオは複数あります。
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はすべてのデータをメモリに保持することに注意してください。
writeTo
のByteArrayOutputStream
メソッドを使用できます。
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] bytes = new bytes[8];
bos.write(bytes);
bos.writeTo(oos);
ByteArrayOutputStream
のインスタンスを作成できます。次に、このByteOutputStream
インスタンスにデータを書き込み、writeTo
を受け入れるOutputStream
メソッドを使用して、ByteArrayOutputStream
を有効にすることができます。引数として渡したOutputStream
のインスタンスへの出力。