src/main/java/org/wltea/analyzer/core/IKSegmenter.java
public synchronized Lexeme next()throws IOException{
		Lexeme l = null;
		while((l = context.getNextLexeme()) == null ){
			/*
			 * 从reader中读取数据，填充buffer
			 * 如果reader是分次读入buffer的，那么buffer要  进行移位处理
			 * 移位处理上次读入的但未处理的数据
			 */
			int available = context.fillBuffer(this.input);
			if(available <= 0){
				//reader已经读完
				context.reset();
				return null;
				
			}else{
				//初始化指针
				context.initCursor();
				do{
        			//遍历子分词器
        			for(ISegmenter segmenter : segmenters){
        				segmenter.analyze(context);
        			}
        			//字符缓冲区接近读完，需要读入新的字符
        			if(context.needRefillBuffer()){
        				break;
        			}
   				//向前移动指针
				}while(context.moveCursor());
				//重置子分词器，为下轮循环进行初始化
				for(ISegmenter segmenter : segmenters){
					segmenter.reset();
				}
			}
			//对分词进行歧义处理
			this.arbitrator.process(context, configuration.isUseSmart());
			//将分词结果输出到结果集，并处理未切分的单个CJK字符
			context.outputToResult();
			//记录本次分词的缓冲区位移
			context.markBufferOffset();			
		}
		return l;
	}
public synchronized Lexeme next()throws IOException{
		Lexeme l = null;
		while((l = context.getNextLexeme()) == null ){
			/*
			 * 从reader中读取数据，填充buffer
			 * 如果reader是分次读入buffer的，那么buffer要  进行移位处理
			 * 移位处理上次读入的但未处理的数据
			 */
			int available = context.fillBuffer(this.input);
			if(available <= 0){
				//reader已经读完
				context.reset();
				return null;
				
			}else{
				//初始化指针
				context.initCursor();
				do{
        			//遍历子分词器
        			for(ISegmenter segmenter : segmenters){
        				segmenter.analyze(context);
        			}
        			//字符缓冲区接近读完，需要读入新的字符
        			if(context.needRefillBuffer()){
        				break;
        			}
   				//向前移动指针
				}while(context.moveCursor());
				//重置子分词器，为下轮循环进行初始化
				for(ISegmenter segmenter : segmenters){
					segmenter.reset();
				}
			}
			//对分词进行歧义处理
			this.arbitrator.process(context, configuration.isUseSmart());
			//将分词结果输出到结果集，并处理未切分的单个CJK字符
			context.outputToResult();
			//记录本次分词的缓冲区位移
			context.markBufferOffset();			
		}
		return l;
	}
public synchronized Lexeme next ( ) throws IOException { Lexeme l = null ; while ( ( l = context . getNextLexeme ( ) ) == null ) { /*
			 * 从reader中读取数据，填充buffer
			 * 如果reader是分次读入buffer的，那么buffer要  进行移位处理
			 * 移位处理上次读入的但未处理的数据
			 */ int available = context . fillBuffer ( this . input ) ; if ( available <= 0 ) { //reader已经读完
 context . reset ( ) ; return null ; } else { //初始化指针
 context . initCursor ( ) ; do { //遍历子分词器
 for ( ISegmenter segmenter : segmenters ) { segmenter . analyze ( context ) ; } //字符缓冲区接近读完，需要读入新的字符
 if ( context . needRefillBuffer ( ) ) { break ; } //向前移动指针
 } while ( context . moveCursor ( ) ) ; //重置子分词器，为下轮循环进行初始化
 for ( ISegmenter segmenter : segmenters ) { segmenter . reset ( ) ; } } //对分词进行歧义处理
 this . arbitrator . process ( context , configuration . isUseSmart ( ) ) ; //将分词结果输出到结果集，并处理未切分的单个CJK字符
 context . outputToResult ( ) ; //记录本次分词的缓冲区位移
 context . markBufferOffset ( ) ; } return l ; }
分词，获取下一个词元
@return Lexeme 词元对象
@throws java.io.IOException
分词，获取下一个词元