ここでかなり問題がありますが、Javaが提供するAPIの使い方がよくわからないからだと思います。
int
と_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()
メソッドにアクセスできず、後者の場合、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
への参照を必ず保存してください。 close()または少なくともflush()が終了したら、DataOutputStream
を実行してから、ByteArrayOutputStream
のtoByteArrayメソッドを使用します。
PipedInputStream
/PipetOutputStream
を介して出力ストリームを入力ストリームに接続する場合は、ストリームアプローチを使用できます。次に、入力ストリームからのデータを消費します。
とにかく、あなたがする必要があることが単純で、ストリームアプローチを必要としないなら、私はあなたが持っている_Java.nio.ByteBuffer
_を使うでしょう
put(byte[] src)
for your _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();
Integerクラスには、intのバイト値を取得するメソッドがあります。 Integer.byteValue()