我使用以下代码解析输入流,它工作正常。
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
XmlHandlerMatchDetails handler = new XmlHandlerDetails();
xr.setContentHandler(handler);
xr.parse(new InputSource(data));
现在我需要记录InputStream来检查它,我这样更改之前的代码:
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
XmlHandlerMatchDetails handler = new XmlHandlerDetails();
xr.setContentHandler(handler);
xr.parse(new InputSource(data));
BufferedReader br = new BufferedReader(new InputStreamReader(data));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
String text = sb.toString();
Log.i(mTag, text);
但我有错误
09-19 12:13:02.982: ERROR/MyClass(338): java.io.IOException: 尝试在关闭的流上读取。
如何在不关闭流的情况下记录或将流转换为字符串?
编辑 - 已解决!!!
我通过解析字符串而不是InputStream来解决它
xr.parse(new InputSource(new StringReader(text)));
最佳答案
我不确定这就是问题所在,但您可以尝试将 while 循环重写为:
while( br.ready() )
sb.append( br.readLine() );
我想到的另一件事是,您使用的 InputStream(数据)可能无法读取两次 - 因此,首先使用 XmlReader 解析它会导致它关闭,然后当您使用时它不会打开尝试使用 BufferedReader 解析它。要验证这一点,请尝试运行 BufferedReader,而不先使用 XmlReader 解析数据。
关于java - 如何在Android中记录和解析InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7470933/