org.nutz.mvc.upload.util
类 BufferRing

java.lang.Object
  继承者 org.nutz.mvc.upload.util.BufferRing

public class BufferRing
extends java.lang.Object

分页缓冲 - 专为高效的成块的解析 HTTP Multipart 输入流而设计

总体的想法是,在内存中构建一个数组环,每个节点是固定宽度的数组(默认8192)。
每次翻页 都相当于将当前环节点的下一个节点读满

每个环节点都有指针指向其下一个节点
每个节点都有一个有效结尾位置以及本节点是否为一个输入流的最末节点

支持一个便利的标记方法(不支持回溯,标记的开始和结束只能在一个节点内不能跨节点)
支持成块写到输出流

考虑到效率问题,BufferRing 有一些基本假设:

如果违背了上述假设, BufferRing 将发生不可预知的异常

作者:
zozoh(zozohtnt@gmail.com)

构造方法摘要
BufferRing(java.io.InputStream ins, int len, int width)
           
 
方法摘要
 void close()
          安全关闭输入流
 void dump(java.io.OutputStream ops)
          被 Dump 的节点将会通过标志表示可以再次加载
 java.lang.String dumpAsString(java.lang.String charset)
          将标记的内容 Dump 成一个字符串
 long load()
          从当前节点的 next 开始,依次将所有可用的节点全部加载满
 MarkMode mark(RemountBytes rb)
           
 long readed()
           
 void skipMark()
          不输出,直接跳过 Mark,相当于将当前的 Mark dump 到一个空的输出流
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

BufferRing

public BufferRing(java.io.InputStream ins,
                  int len,
                  int width)
方法详细信息

mark

public MarkMode mark(RemountBytes rb)
              throws java.io.IOException
抛出:
java.io.IOException

dump

public void dump(java.io.OutputStream ops)
          throws java.io.IOException
被 Dump 的节点将会通过标志表示可以再次加载

参数:
ops - 输出流,如果为 null,则不会输出,直接改变标志
抛出:
java.io.IOException

dumpAsString

public java.lang.String dumpAsString(java.lang.String charset)
                              throws java.io.IOException
将标记的内容 Dump 成一个字符串

返回:
字符串
抛出:
java.io.IOException

skipMark

public void skipMark()
              throws java.io.IOException
不输出,直接跳过 Mark,相当于将当前的 Mark dump 到一个空的输出流

抛出:
java.io.IOException

load

public long load()
          throws java.io.IOException
从当前节点的 next 开始,依次将所有可用的节点全部加载满

返回:
一共读去的字节数
抛出:
java.io.IOException

readed

public long readed()
返回:
已经读了多少字节

close

public void close()
安全关闭输入流