我从HttpUrlConnection(connection.getInputStream())接收一个InputStream,我正在使用DocumentBuilder(documenbtBuilder.parse(inputStream))解析输入流。在解析之前,我想将接收到的数据写入日志文件。当我这样做时,我得到org.xml.sax.SAXParseException:parse方法中文档Exception的意外结束。如果我不写文件,我的代码工作正常,但我需要记录收到的数据。
请在下面找到写入文件的代码:
final InputStream input = connection.getInputStream();
writeLogInfo(input);
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(input);
//Method that writes tito log file.
private void writeLogInfo(InputStream input){
OutputStream os = new FileOutputStream("mylogfile.txt");
byte[] buffer = new byte[1024];
int byteRead;
while((byteRead = input.read(buffer)) != -1){
os.write(buffer,0,byteRead);
}
os.flush();
os.close();
}
我怀疑是因为多次使用InputStream,因为代码在我不调用writeLogInfo()时有效。我没有在我的代码中的任何地方关闭输入流。我在这做错了什么?
答案 0 :(得分:0)
当您将内容写入文件时,您将到达输入流的末尾。
所以在那之后,当你试图解析时,你会得到例外。
在将输入流传递给documentbuilder之前,您需要在输入流上使用mark
和reset
方法。
此外,首先需要检查输入流是否支持标记。
这是javadoc,供您参考
http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html
答案 1 :(得分:0)
您确定文件大小不超过1024个字节。如果没有,为什么不把你的“输入流”放到BufferredInputstream,并创建字节数组..
BufferedInputStream bin= new BufferedInputStream(new DataInputStream(input));
byte[] buffer= new byte[bin.available()];
bin.read(buffer);
os.write(buffer);
......
......
bin.close();
......