在java中,我有inputstream
(可能sequenceinputstream
)包含多个文件。我想用java分隔这些文件。 java中有没有可用的解决方案?
答案 0 :(得分:0)
简单的答案是:你不能/不应该。
复杂的答案:如果您正在处理SequenceInputStream
,您可以使用此反射黑客访问基础流:
@SuppressWarnings("unchecked")
public static Enumeration<InputStream> split(final SequenceInputStream sis){
try{
Field streamsEnumField =
SequenceInputStream.class.getDeclaredField("e");
streamsEnumField.setAccessible(true);
return (Enumeration<InputStream>) streamsEnumField.get(sis);
} catch(final Exception e){
throw new IllegalStateException(e);
}
}
但我会非常谨慎地使用这样的东西。
答案 1 :(得分:0)
这取决于你有什么样的文件,如果有任何保留的序列指示文件的结束和/或开头,如HTML或XML等,那么你可以将它们分开,否则我看不到任何文件这样做的方法。
答案 2 :(得分:0)
您需要有一些方法来确定一个文件的结束位置和下一个文件的开头 - 大多数文件将前几个字节保留为“标识”标记。请记住,Java坚持使用SIGNED字节类可能会在运行时识别它们。
但是,你无法真正拆分流。因此,您必须通过普通的byte []数组来暂存数据。我从家庭流中读取4K(用于文件)或64K(用于网络)的块,因为底层本机调用通常使用这些大小,将块存储在列表中,然后为每个文件创建一个ByteArrayInputStream