如何将输入流记录到android中的文件然后解析它

时间:2014-05-08 13:30:35

标签: java android

我从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()时有效。我没有在我的代码中的任何地方关闭输入流。我在这做错了什么?

2 个答案:

答案 0 :(得分:0)

当您将内容写入文件时,您将到达输入流的末尾。

所以在那之后,当你试图解析时,你会得到例外。

在将输入流传递给documentbuilder之前,您需要在输入流上使用markreset方法。

此外,首先需要检查输入流是否支持标记。

这是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();
......