我想从ZipInputStream中提取一个xml文件&其他内容并从xml创建我的对象解析zipinputstream。但是,我得到文件异常的过早结束 - 对于下面的代码或流关闭 - 当我没有while循环读取inputStream。据我所知,ZipInputStream.getNextEntry获取输入流的下一个条目。文件过早结束。尝试从Zipinputstream解析XML的异常
另外 - 当我通过创建一个实际的临时文件运行它&通过输入流(如在注释的代码) - 它处理得很好 - 但在我的情况下,我不会写入磁盘 - 所以这一切必须在内存中发生。有人可以告诉我,我的代码错在哪里,我能做些什么来解决它?
ZipEntry entry;
Map<String, byte[]> otherElements = new HashMap<String, byte[]>();
entry =((ZipInputStream)inputStream).getNextEntry();
while (entry != null) {
logger.debug("entry: " + entry.getName() + ", " + entry.getSize());
System.out.println(entry.getName() + " - " + entry.getSize());
if (entry.getName().equalsIgnoreCase("Document.xml")) {
/*File file = new File("C:\\tmp.xml");
FileOutputStream fos = new FileOutputStream();
int read = 0;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
fos.write(bytes, 0, read);
}
InputStream fis = new FileInputStream();*/
while(inputStream.available()>0){
inputStream.read();
}
myOutput = buildMyOutput((ZipInputStream)inputStream);
//fos.close();
//fis.close();
// method that takes the input and creates the java object
private MyObject buildMyOutput(InputStream xmlStream) throws Exception {
// build my objects
XStream xstream = ConvertUtil.getXStream();
xstream.processAnnotations(MyObject.class);
MyObject myOutput = (MyObject) xstream.fromXML(xmlStream);
return myOutput;
}
后来我才意识到,真正的罪魁祸首是我的IDE设置默认情况下,而不是系统默认使用UTF-8 。因此,根据您使用的IDE,检查IDE的编码也是值得的(完全无法编程的修复程序性问题!) – conphident4