流数据处理设计模式

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

  2. pull, stream-based,事件驱动。代表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)数据,控制权在客户端。


阅读更多
文章标签: Java 设计模式
个人分类: Note
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭