1// 2// ======================================================================== 3// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. 4// ------------------------------------------------------------------------ 5// All rights reserved. This program and the accompanying materials 6// are made available under the terms of the Eclipse Public License v1.0 7// and Apache License v2.0 which accompanies this distribution. 8// 9// The Eclipse Public License is available at 10// http://www.eclipse.org/legal/epl-v10.html 11// 12// The Apache License v2.0 is available at 13// http://www.opensource.org/licenses/apache2.0.php 14// 15// You may elect to redistribute this code under either of these licenses. 16// ======================================================================== 17// 18 19package org.eclipse.jetty.util; 20 21/* ------------------------------------------------------------ */ 22/** 23 * UTF-8 StringBuffer. 24 * 25 * This class wraps a standard {@link java.lang.StringBuffer} and provides methods to append 26 * UTF-8 encoded bytes, that are converted into characters. 27 * 28 * This class is stateful and up to 4 calls to {@link #append(byte)} may be needed before 29 * state a character is appended to the string buffer. 30 * 31 * The UTF-8 decoding is done by this class and no additional buffers or Readers are used. 32 * The UTF-8 code was inspired by http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ 33 */ 34public class Utf8StringBuffer extends Utf8Appendable 35{ 36 final StringBuffer _buffer; 37 38 public Utf8StringBuffer() 39 { 40 super(new StringBuffer()); 41 _buffer = (StringBuffer)_appendable; 42 } 43 44 public Utf8StringBuffer(int capacity) 45 { 46 super(new StringBuffer(capacity)); 47 _buffer = (StringBuffer)_appendable; 48 } 49 50 @Override 51 public int length() 52 { 53 return _buffer.length(); 54 } 55 56 @Override 57 public void reset() 58 { 59 super.reset(); 60 _buffer.setLength(0); 61 } 62 63 public StringBuffer getStringBuffer() 64 { 65 checkState(); 66 return _buffer; 67 } 68 69 @Override 70 public String toString() 71 { 72 checkState(); 73 return _buffer.toString(); 74 } 75} 76