将输入流分成两个流

时间:2012-11-07 13:34:05

标签: java inputstream

我需要结合inpustreams,其中只有string而另一个是avi文件。我可以轻松地将其中两个组合起来,如下所示:

  

InputStream is = new SequenceInputStream(stringStream,aviStream);

但是,当涉及到单独使用字符串和avi时,我失败了。 avi文件与其第一个大小不匹配,不知怎的,我正在丢失一些大小。

我可以使用is使用Scanner阅读delimiter,但在这种情况下,avi流将为String,我将丢失信息。

知道如何分离输入流?我想读回我的字符串,我应该将其余的流作为inpustream。

编辑:我正在考虑将流转换为字节数组,然后根据分隔符将数组分成两部分。然后第二部分,即avi,我可以将其转换回输入流。但这似乎很麻烦。

1 个答案:

答案 0 :(得分:3)

扫描仪仅用于文本数据,而不是二进制文件。二进制数据,例如AVI可以包含每个字节值,这意味着没有可以使用的分隔符,这些分隔符不会出现在数据中。

您可以按以下方式将文本与原始数据合并。

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

反转过程你可以使用带有readUTF,readInt和readFully()的DataInputStream