2012-11-07 53 views
1

我需要合并到内部流,哪一个只有string,另一个是avi文件。我可以很容易地结合其中两个,如下所示:划分成两条流

InputStream is = new SequenceInputStream(stringStream,aviStream);

但是,当涉及到分开的字符串和AVI,我失败了。 avi文件与第一个尺寸不匹配,不知何故我失去了一些尺寸。

我可以通过使用delimiterisScanner,但在这种情况下,AVI流将String,我会丢失信息。

任何想法如何分离输入流?我想读回我的字符串,我应该把其余的流作为一个inpustream。

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

回答

3

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

您可以通过以下方式将文本与原始数据组合在一起。

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

扭转你可以用DataInputStream所用的readUTF,的readInt和的readFully()

+0

所以你说,如果我称之为的readUTF它会给我只字符串,但我应该如何读AVI过程?我认为读取全部读取? – anvarik

+0

你读了你用'readInt'写的长度,创建一个这样大小的'byte []',并在该字节数组上调用readFully。 –

+0

完美,非常感谢! – anvarik