流数据处理设计模式

本文探讨了流数据处理中的两种主要模式:Push和Pull。Push模式中,解析器主动推送数据给客户端,而Pull模式则允许客户端按需获取数据,控制权在客户端。这两种模式在内存使用和实时性方面各有优劣,适用于不同规模的数据处理场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. push, stream-based, 事件驱动。代表SAX(JSR 5)

  2. pull, stream-based,事件驱动。代表StAX, Jackson, opencsv

    游标模式

     

    输入

    输出

    StAX(JSR 173)

    javax.xml.stream.XMLStreamReader

    获取游标当前的数据:

    int getEventType(), getXXX(), hasXXX(), isXXX()

    移动游标:

    public int next() throws XMLStreamException

    public int nextTag() throws XMLStreamException

    判断终止状态:

    public boolean hasNext() throws XMLStreamException

    状态常量:

    javax.xml.stream.XMLStreamConstants

    javax.xml.stream.XMLStreamWriter

    移动游标:

    wirteXXX()

    Jackson

    com.fasterxml.jackson.core.JsonParser

    获取游标当前的数据:

    getXXX()

    移动游标:

    nextXXX()

    判断终止状态:

    nextXXX() == null

    状态常量:

    com.fasterxml.jackson.core.JsonToken

    com.fasterxml.jackson.core.JsonGenerator

    移动游标:

    wirteXXX()

    JSON-P (JSR 353)

    javax.json.stream.JsonParser

    获取游标当前的数据:

    getXXX()

    移动游标:

    public JsonParser.Event next()

    判断终止状态:

    public boolean hasNext()

    状态常量:

    javax.json.stream.JsonParser.Event

    javax.json.stream.JsonGenerator

    移动游标:

    wirteXXX()


     

    迭代器模式

     

    输入

    输出

    StAX(JSR 173)

    javax.xml.stream.XMLEventReader

    迭代方法:

    public XMLEvent nextEvent() throws XMLStreamException

    public XMLEvent nextTag() throws XMLStreamException

    判断终止状态:

    public boolean hasNext()

    迭代对象:

    javax.xml.stream.events.XMLEvent

    javax.xml.stream.XMLEventWriter

    public void add(XMLEvent) throws XMLStreamException

    opencsv

    com.opencsv.CSVReader

    迭代方法:

    public String[] readNext() throws IOException

    protected String getNextLine() throws IOException

    判断终止状态:

    readNext() == null

    迭代对象:

    String[]

    com.opencsv.CSVWriter

    public void writeNext(String[])

  3. 内存对象模型。代表DOM(JSR 5), JSON-P(JSR 353)

  4. 比较

内存对象模型模式灵活性高,可以对数据自由访问。代价是占用内存和CPU大。in memory模式适合小规模数据。

stream-based模式,对数据的输入、解析和输出是单向、串行且实时的,不需要对数据进行准确的预知。stream-based模式下,输入的数据被使用后会立即被丢弃,因此,stream-based模式占用内存和CPU小。代价是,在数据处理过程中的特定的时刻,只能看到一个局部的信息。

push模式的解析器,会将处理的数据发送(push)给客户端,不管客户端是否准备好使用这些数据,控制权在解析器。

pull模式的解析器,会等待客户端的调用,客户端只在需要的时候,通过调用解析器的方法来获取(pull)数据,控制权在客户端。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值