java - 将输入流分成两个流

标签 java inputstream

我需要合并到 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/

相关文章:

java - InputStream 没有收到 EOF

java - 输入流:int/long 参数混合

java - 使用输出流发送文件长度并使用输入流接收长度和字节 [] 以将帧从一个设备流式传输到另一个 Android/Java

Java:为了方便起见,在 equals() 中使用 hashCode()?

java - 制作Java GUI : Center Button Is Not Extending Into Space As It Should

java - 如何随机生成猜测

java - ReentrantReadWriteLock 在 ConcurrentHashMap::compute() 中使用时挂起

java - 在显示滚动条之前将内容缩小到 minSize

java - 尝试连接到 URL 读取 xml 时出现错误 401

用于 Zipfile 的 Java ByteBuffer