1

私は入力ストリームに結合する必要がありました.1つは唯一stringのもので、もう1つはaviファイルです。以下のように、2つを簡単に組み合わせることができます。

InputStream is = new SequenceInputStream(stringStream, aviStream);

しかし、文字列とaviを別々に取るようになると、私は失敗しています。avi ファイルが最初のサイズと一致せず、なぜかサイズが小さくなっています。

を使用してisで読み取ることはできますが、その場合は avi ストリームになり、情報が失われます。ScannerdelimiterString

入力ストリームをどのように分離できますか? 文字列を読み返したいので、残りのストリームを入力ストリームとして持つ必要があります。

EDIT:ストリームをバイト配列に変換してから、区切り文字に従って配列を2つに分割することを考えています。次に、avi の 2 番目の部分を、入力ストリームに戻すことができます。でも面倒そうです。

4

1 に答える 1

3

Scanner は、バイナリではなくテキスト データ専用です。バイナリ データ、たとえば AVI はすべてのバイト値を含むことができます。これは、データに表示されない使用可能な区切り文字がないことを意味します。

次の方法で、テキストと生データを組み合わせることができます。

DataOutputStream dos = new DataOutputStream(...);
dos.writeUTF(string);
dos.writeInt(bytes.length);
dos.write(bytes);

プロセスを逆にするには、readUTF、readInt、および readFully() で DataInputStream を使用できます。

于 2012-11-07T13:39:30.497 に答える