包含两个文件的单个输入流。 我想分割这些文件

在java中,我有一个包含多个文件的输入inputstream (可能是sequenceinputstream )。 我想用java分隔这些文件。 java中有没有可用的解决方案?

简单的答案是:你不能/不应该。

复杂的答案:如果您正在处理SequenceInputStream ,您可以使用此reflectionhack访问基础流:

 @SuppressWarnings("unchecked") public static Enumeration split(final SequenceInputStream sis){ try{ Field streamsEnumField = SequenceInputStream.class.getDeclaredField("e"); streamsEnumField.setAccessible(true); return (Enumeration) streamsEnumField.get(sis); } catch(final Exception e){ throw new IllegalStateException(e); } } 

但是我会非常小心使用这样的东西。

这取决于你有什么样的文件,如果有任何保留的序列指示文件的结束和/或开头,如HTML或XML等,那么你可以将它们分开,否则我看不到任何办法这个。

您需要有一些方法来确定一个文件的结束位置和下一个开始 – 大多数文件将前几个字节保留为“标识”标记。 请记住,Java坚持使用SIGNED字节类可能会在运行时识别它们。

但是,您无法真正拆分流。 因此,您必须通过普通的byte []数组来暂存数据。 我从父级流中读取4K(用于文件)或64K(用于网络)的块,因为底层本机调用通常使用这些大小,将块存储在列表中,然后在每个文件末尾创建一个ByteArrayInputStream 。