Java中解析InputStream的XML需选SAX、DOM或StAX:DOM适合小中文件但占内存;SAX事件驱动、低内存;StAX拉模式、易控且高效;均须防XXE、正确关流、处理BOM。

Java中从InputStream解析XML,核心是使用标准的XML解析API(如SAX、DOM或StAX),将输入流作为数据源传入解析器。关键在于确保流未被提前读取或关闭,并选择合适解析方式。
DOM会将整个XML加载为内存中的树结构,便于随机访问节点,但不适用于大文件。
DocumentBuilder配合InputSource包装InputStream
InputStream含BOM(如UTF-8带签名),可能导致解析失败,建议用InputStreamReader显式指定编码并跳过BOMDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new InputSource(inputStream));
SAX是事件驱动的流式解析,不构建内存树,适合处理大XML或只需提取部分信息的场景。
DefaultHandler子类,重写startElement、characters等方法InputStream给XMLReader.parse(),无需额外包装setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)防止XXE攻击StAX(Streaming API for XML)是Java内置的拉模式解析器,比SAX更易控制流程,且无需完整加载文档。
立即学习“Java免费学习笔记(深入)”;
XMLInputFactory创建XMLStreamReader
InputStream,支持设置字符编码(如factory.createXMLStreamReader(inputStream, "UTF-8"))next()和getEventType()遍历事件,用getElementText()快速获取文本内容无论哪种方式,都要注意:
InputStream只能被读取一次,重复解析需重新获取流(如重置、重开或缓存字节)XMLStreamReader也建议调用close())javax.xml.parsers.SAXParserFactory.newInstance().newSAXParser()旧式写法,优先用标准工厂模式以上就是Java如何从输入流(InputStream)解析XML的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号