sách gpt4 ai đã đi

Bộ phân tích cú pháp SAX có lưu giữ toàn bộ dữ liệu trong bộ nhớ không?

In lại 作者:行者123 更新时间:2023-12-02 01:36:45 28 4
mua khóa gpt4 Nike

我正在满足一项要求,即我需要拆分大型 XML 并进一步处理。

这是 XML 示例,它可以变成单行。

yongjin

Đây là mã của tôi:

import java.util.Arrays;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class ReadXML {

public static void main(String argv[]) {

thử {

Nhà máy SAXParserFactory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();

DefaultHandler handler = new DefaultHandler() {

boolean bfname = false;
boolean blname = false;
boolean bnname = false;
boolean bsalary = false;

public void startElement(String uri, String localName,String qName,
Attributes attributes) throws SAXException {

System.out.println("Parameters :" + uri +":"+ localName +":"+ qName +":"+ attributes);
System.out.println("Start Element :" + qName);

if (qName.equalsIgnoreCase("FIRSTNAME")) {
bfname = true;
}

if (qName.equalsIgnoreCase("LASTNAME")) {
blname = true;
}

if (qName.equalsIgnoreCase("NICKNAME")) {
bnname = true;
}

if (qName.equalsIgnoreCase("SALARY")) {
bsalary = true;
}

}

public void endElement(String uri, String localName,
String qName) throws SAXException {

System.out.println("End Element :" + qName);

}

public void characters(char[] ch, int start, int length) throws SAXException {

System.out.println("Im here:"+Arrays.toString(ch));----Line 1
if (bfname) {
System.out.println("First Name : " + new String(ch, start, length));
bfname = false;
}

if (blname) {
System.out.println("Last Name : " + new String(ch, start, length));
blname = false;
}

if (bnname) {
System.out.println("Nick Name : " + new String(ch, start, length));
bnname = false;
}

if (bsalary) {
System.out.println("Salary : " + new String(ch, start, length));
bsalary = false;
}

}

};

saxParser.parse("C:\\Lenny\\Work\\XML\\SaxParsing_01.xml", handler);



/*InputSource input = new InputSource("C:\\Lenny\\Work\\XML\\SaxParsing_01.xml");
System.out.println(input);
XMLReader reader = saxParser.getXMLReader();
reader.parse(input);*/


} catch (Exception e) {
e.printStackTrace();
}

}

}

我的第一个疑问是,SAXParser 是否明智地读取字节?

其次,我想要这样的输出。

yong
jin

这件事我可以处理,但想知道..当我得到时标记并进入 characters方法,为什么它打印所有整个 XML ?不应该打印 yong仅在 Line 1而不是打印整个 XML?它全部打印出来,所以这就是我想的原因,确实SAXParser是否将整个数据保留在内存中?

任何建议请..!

Cảm ơn

1 Câu trả lời

Does SAX Parser keeps all data in Memory?

不,这就是重点。将 XML 文档的整个 DOM 数据加载到内存中,然后从中提取您想要的内容,比使用 SAX 麻烦的模型要容易得多。

但是 SAX 具有即时读取文档的优点,而无需将其完全加载到内存中。

My First Doubt is, Does SAXParser reads bytes wise ?

不是按字节,不。这将是非常低效的,特别是考虑到 SAX 的本质就是对巨大的文档进行操作。这是一个缓冲读取。并不是说这会消耗太多内存。

Why its printing All whole XML ? Shouldn't it print yong only at Line 1 rather than printing whole XML ? Its printing all, So that's why am thinking, DOES SAXParser keep whole data in memory or not ?

参见上文,出于合理的性能原因,SAX 使用缓冲区进行读取。作为参数提供给characters()方法的char[]大致就是前面提到的缓冲区。

在您的示例中,您的文档很小,当然它将完全适合用于读取文档的现实世界缓冲区。如果您要处理更大的文档,您会注意到缓冲区包含数千个字符,但远不及整个文档。

关于java - SAX 解析器是否将所有数据保存在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55129320/

28 4 0
Bài viết được đề xuất: android - 应用程序崩溃 - Web 服务没有返回
Bài viết được đề xuất: extjs - Ext JS 仪表板布局和最大化/最小化面板
Bài viết được đề xuất: java备份mysqldump.exe绝对路径改为相对路径
Bài viết được đề xuất: cluster-analysis - MinHashing 与 SimHashing
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com