bytearrayoutputStreamとdataoutputStreamを同時に使用する方法(Java)
-
24-10-2019 - |
質問
ここではかなり問題がありますが、Javaが提供するAPIを使用する方法があまり理解できていないからだと思います。
私は書く必要があります int
そしてa byte[]
に byte[]
私は使用することを考えました DataOutputStream
データの書き込みを解決するため writeInt(int i)
と write(byte[] b)
, 、そしてそれをバイト配列に入れることができるようにするには、使用する必要があります ByteArrayOutputStream
方法 toByteArray().
このクラスはラッパーパターンを使用していることを理解しているので、2つのオプションがありました。
DataOutputStream w = new DataOutputStream(new ByteArrayOutputStream());
また
ByteArrayOutputStream w = new ByteArrayOutputStream(new DataOutputStream());
しかし、どちらの場合も、私は方法を「緩め」ます。最初のケースでは、アクセスできません toByteArray()
メソッド、そして2番目に、私はアクセスできません writeInt()
方法。
このクラスを一緒に使用するにはどうすればよいですか?
解決
このような:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream w = new DataOutputStream(baos);
w.writeInt(100);
w.write(byteArray);
w.flush();
byte[] result = baos.toByteArray();
実際、2番目のバージョンはまったく機能しません。 DataOutputStream
データを書き込むための実際のターゲットストリームが必要です。できない new DataOutputStream()
. 。実際にそのようなコンストラクターはありません。
他のヒント
bytearrayoutputStreamを保持して、DataOutputStreamに渡す変数を作成できますか。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeInt(1);
byte[] result = dos.toByteArray();
前者のケースを使用 - ラップ DataOutputStream
の周辺 ByteArrayOutputStream
. 。参照を保存してください ByteArrayOutputStream
. 。あなたが閉じているとき()または少なくともflush()を終えたとき DataOutputStream
そして、のTobytearrayメソッドを使用します ByteArrayOutputStream
.
OutputStreamを介して入力ストリームに接続すると、ストリームアプローチを使用できます PipedInputStream
/PipetOutputStream
. 。次に、inputstreamからデータを消費します。
とにかく、あなたがする必要があることが単純で、ストリームアプローチを必要としない場合、私は java.nio.ByteBuffer
あなたが持っているもの
put(byte[] src)
あなたのためのbyte[]
putInt(int value)
- と
byte[] array()
コンテンツを取得します
このようなものは必要ありません
Example exampleExample = method(example);
ByteArrayOutputStream baos = new ByteArrayOutputStream(); marshaller.marshal(exampleExample , baos);
Message message = MessageBuilder.withBody(baos.toByteArray()).build();
整数クラスには、intのバイト値を取得する方法があります。Integer.byteValue()