1

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

InputStream is = new SequenceInputStream(stringStream, aviStream);

但是,当涉及到单独获取字符串和 avi 时,我失败了。avi 文件与其第一个大小不匹配,不知何故我失去了一些大小。

我可以通过使用 ais来阅读,但在这种情况下,avi 流将是并且我将丢失信息。ScannerdelimiterString

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

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

4

1 回答 1

3

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

您可以通过以下方式将文本与原始数据结合起来。

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

要反转该过程,您可以将 DataInputStream 与 readUTF、readInt 和 readFully() 一起使用

于 2012-11-07T13:39:30.497 回答