加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

流数据处理设计模式

发布时间:2020-12-14 02:00:09 所属栏目:大数据 来源:网络整理
导读:push,stream-based,事件驱动。代表SAX(JSR 5) pull,事件驱动。代表StAX,Jackson,opencsv 游标模式 ? 输入 输出 StAX(JSR?173) javax.xml.stream.XML Stream Reader l ? 获取游标当前的数据: int?getEventType(),?getXXX(),?hasXXX(),?isXXX() l ? 移动游标
  1. push,stream-based,事件驱动。代表SAX(JSR 5)

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

    游标模式

    ?

    输入

    输出

    StAX(JSR?173)

    javax.xml.stream.XMLStreamReader

    l?获取游标当前的数据:

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

    l?移动游标:

    public?int?next()?throws?XMLStreamException

    public?int?nextTag()?throws?XMLStreamException

    l?判断终止状态:

    public?boolean?hasNext()?throws?XMLStreamException

    l?状态常量:

    javax.xml.stream.XMLStreamConstants

    javax.xml.stream.XMLStreamWriter

    l?移动游标:

    wirteXXX()

    Jackson

    com.fasterxml.jackson.core.JsonParser

    l?获取游标当前的数据:

    getXXX()

    l?移动游标:

    nextXXX()

    l?判断终止状态:

    nextXXX()?==?null

    l?状态常量:

    com.fasterxml.jackson.core.JsonToken

    com.fasterxml.jackson.core.JsonGenerator

    l?移动游标:

    wirteXXX()

    JSON-P?(JSR?353)

    javax.json.stream.JsonParser

    l?获取游标当前的数据:

    getXXX()

    l?移动游标:

    public?JsonParser.Event?next()

    l?判断终止状态:

    public?boolean?hasNext()

    l?状态常量:

    javax.json.stream.JsonParser.Event

    javax.json.stream.JsonGenerator

    l?移动游标:

    wirteXXX()


    ?

    迭代器模式

    ?

    输入

    输出

    StAX(JSR?173)

    javax.xml.stream.XMLEventReader

    l?迭代方法:

    public?XMLEvent?nextEvent()?throws?XMLStreamException

    public?XMLEvent?nextTag()?throws?XMLStreamException

    l?判断终止状态:

    public?boolean?hasNext()

    l?迭代对象:

    javax.xml.stream.events.XMLEvent

    javax.xml.stream.XMLEventWriter

    public?void?add(XMLEvent)?throws?XMLStreamException

    opencsv

    com.opencsv.CSVReader

    l?迭代方法:

    public?String[]?readNext()?throws?IOException

    protected?String?getNextLine()?throws?IOException

    l?判断终止状态:

    readNext()?==?null

    l?迭代对象:

    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)数据,控制权在客户端。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读