nl_tokens: Write a portion of an array of characters .
pl_tokens: public void write ( char cbuf [ ] , int off , int len ) throws IOException { ensureOpen ( ) ; if ( bufferSize == 0 ) { initOut ( ) ; out . write ( cbuf , off , len ) ; return ; } if ( ( off < 0 ) || ( off > cbuf . length ) || ( len < 0 ) || ( ( off + len ) > cbuf . length ) || ( ( off + len ) < 0 ) ) { throw new IndexOutOfBoundsException ( ) ; } else if ( len == 0 ) { return ; } if ( len >= bufferSize ) { /* If the request length exceeds the size of the output buffer,
                 flush the buffer and then write the data directly.  In this
                 way buffered streams will cascade harmlessly. */ if ( autoFlush ) flushBuffer ( ) ; else bufferOverflow ( ) ; initOut ( ) ; out . write ( cbuf , off , len ) ; return ; } int b = off , t = off + len ; while ( b < t ) { int d = <mask> ( getRemaining ( ) , t - b ) ; System . arraycopy ( cbuf , b , buf . buf , buf . pos , d ) ; b += d ; buf . pos += d ; if ( getRemaining ( ) == 0 ) if ( autoFlush ) flushBuffer ( ) ; else bufferOverflow ( ) ; } }