private void _writeStringCustom(final int len)
			throws IOException, JsonGenerationException
	{
		// And then we'll need to verify need for escaping etc:
		int end = _outputTail + len;
		final int[] escCodes = _outputEscapes;
		final int maxNonEscaped = (_maximumNonEscapedChar < 1) ? 0xFFFF : _maximumNonEscapedChar;
		final int escLimit = Math.min(escCodes.length, maxNonEscaped+1);
		int escCode = 0;
		final CharacterEscapes customEscapes = _characterEscapes;

		output_loop:
		while (_outputTail < end) {
			char c;
			// Fast loop for chars not needing escaping
			escape_loop:
			while (true) {
				c = _outputBuffer[_outputTail];
				if (c < escLimit) {
					escCode = escCodes[c];
					if (escCode != 0) {
						break escape_loop;
					}
				} else if (c > maxNonEscaped) {
					escCode = CharacterEscapes.ESCAPE_STANDARD;
					break escape_loop;
				} else {
					if ((_currentEscape = customEscapes.getEscapeSequence(c)) != null) {
						escCode = CharacterEscapes.ESCAPE_CUSTOM;
						break escape_loop;
					}
				}
				if (++_outputTail >= end) {
					break output_loop;
				}
			}
			int flushLen = (_outputTail - _outputHead);
			if (flushLen > 0) {
				_writer.write(_outputBuffer, _outputHead, flushLen);
			}
			++_outputTail;
			_prependOrWriteCharacterEscape(c, escCode);
		}
	}
private void _writeStringCustom ( final int len ) throws IOException , JsonGenerationException { int end = _outputTail + len ; final int [ ] escCodes = _outputEscapes ; final int maxNonEscaped = ( _maximumNonEscapedChar < 1 ) ? 0xFFFF : _maximumNonEscapedChar ; final int escLimit = Math . min ( escCodes . length , maxNonEscaped + 1 ) ; int escCode = 0 ; final CharacterEscapes customEscapes = _characterEscapes ; output_loop : while ( _outputTail < end ) { char c ; escape_loop : while ( true ) { c = _outputBuffer [ _outputTail ] ; if ( c < escLimit ) { escCode = escCodes [ c ] ; if ( escCode != 0 ) { break escape_loop ; } } else if ( c > maxNonEscaped ) { escCode = CharacterEscapes . ESCAPE_STANDARD ; break escape_loop ; } else { if ( ( _currentEscape = customEscapes . getEscapeSequence ( c ) ) != null ) { escCode = CharacterEscapes . ESCAPE_CUSTOM ; break escape_loop ; } } if ( ++ _outputTail >= end ) { break output_loop ; } } int flushLen = ( _outputTail - _outputHead ) ; if ( flushLen > 0 ) { _writer . write ( _outputBuffer , _outputHead , flushLen ) ; } ++ _outputTail ; _prependOrWriteCharacterEscape ( c , escCode ) ; } }
/* Same as "_writeString2()", except needs additional escaping
for subset of characters