質問

ここではかなり問題がありますが、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()

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top