13

ここでかなり問題がありますが、Javaが提供するAPIの使い方がよくわからないからだと思います。

intbyte[]をに書き込む必要がありbyte[]ます。

とを使用しDataOutputStreamてデータの書き込みを解決するためにを使用することを考えました。それをバイト配列に入れることができるようにするには、メソッドを使用する必要があります。writeInt(int i)write(byte[] b)ByteArrayOutputStreamtoByteArray().

このクラスはラッパーパターンを使用していることを理解しているので、2つのオプションがありました。

DataOutputStream w = new DataOutputStream(new ByteArrayOutputStream());

また

ByteArrayOutputStream w = new ByteArrayOutputStream(new DataOutputStream());

しかし、どちらの場合も、私はメソッドを「緩め」ます。前者の場合、toByteArray()メソッドにアクセスできず、後者の場合、メソッドにアクセスできませんwriteInt()

このクラスを一緒に使用するにはどうすればよいですか?

4

6 に答える 6

42

このような:

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()。そのようなコンストラクターは実際にはありません。

于 2010-06-06T14:35:41.870 に答える
3

ByteArrayOutputStreamを保持する変数を作成し、それをDataOutputStreamに渡すことができますか。

ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeInt(1);
byte[] result = dos.toByteArray();
于 2010-06-06T14:41:16.253 に答える
2

前者の場合を使用します-をラップDataOutputStreamByteArrayOutputStreamます。への参照を必ず保存してくださいByteArrayOutputStream。終了したら、close()または少なくともflush()を実行してDataOutputStreamから、のtoByteArrayメソッドを使用しますByteArrayOutputStream

于 2010-06-06T14:36:23.790 に答える
1

PipedInputStream/を介して出力ストリームを入力ストリームに接続する場合は、ストリームアプローチを使用できますPipetOutputStream。次に、入力ストリームからのデータを消費します。

とにかく、あなたがする必要があることが単純で、ストリームアプローチを必要としないのであれば、私はjava.nio.ByteBufferあなたが持っているものを使用します

  • put(byte[] src)あなたのためのbyte[]
  • putInt(int value)
  • byte[] array()コンテンツを取得するには
于 2010-06-06T14:40:06.777 に答える
0

Integerクラスには、intのバイト値を取得するメソッドがあります。 Integer.byteValue()

于 2010-06-06T14:36:48.680 に答える