我需要合并到 inpustream,其中一个只有 string
,另一个是 avi
文件。我可以很容易地将其中两个组合起来,如下所示:
InputStream is = new SequenceInputStream(stringStream, aviStream);
但是,当涉及到分别获取字符串和 avi 时,我失败了。 avi 文件与其第一个大小不匹配,不知何故我丢失了一些大小。
我可以使用 delimiter
使用 Scanner
读取 is
,但在那种情况下,avi 流将是 String
我会丢失信息。
知道如何分离输入流吗?我想读回我的字符串,我应该将流的其余部分作为输入流。
编辑:我正在考虑将流转换为字节数组,然后根据分隔符将数组分成两部分。然后是第二部分,即 avi 部分,我可以将其转换回输入流。但这似乎很麻烦。
最佳答案
Scanner 仅适用于文本数据,不适用于二进制数据。二进制数据,例如AVI 可以包含每个字节值,这意味着您可以使用不会出现在数据中的定界符。
您可以通过以下方式将文本与原始数据结合起来。
DataOutputStream dos = new DataOutputStream(...);
dos.writeUTF(string);
dos.writeInt(bytes.length);
dos.write(bytes);
要反转这个过程,您可以将 DataInputStream 与 readUTF、readInt 和 readFully() 结合使用
关于java - 将输入流分成两个流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13270859/