View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2016 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  
19  package org.eclipse.jetty.websocket.common.util;
20  
21  import java.nio.ByteBuffer;
22  
23  import org.eclipse.jetty.util.Utf8Appendable;
24  import org.eclipse.jetty.util.Utf8StringBuilder;
25  
26  /**
27   * Similar in scope to the {@link Utf8StringBuilder}, but allowing partially constructed Strings without throwing
28   * Exceptions for incomplete UTF8 sequences.
29   * <p>
30   * A call to {@link #toPartialString(ByteBuffer)} will return the section of the String from the start to the last
31   * completed UTF8 sequence. Leaving incomplete sequences for a subsequent call to complete.
32   */
33  public class Utf8PartialBuilder
34  {
35      private final StringBuilder str;
36      private final Utf8Appendable utf8;
37  
38      public Utf8PartialBuilder()
39      {
40          this.str = new StringBuilder();
41          this.utf8 = new Utf8Appendable(str)
42          {
43              @Override
44              public int length()
45              {
46                  return str.length();
47              }
48          };
49      }
50  
51      public String toPartialString(ByteBuffer buf)
52      {
53          if (buf == null)
54          {
55              // no change, return empty
56              return "";
57          }
58          utf8.append(buf);
59          String ret = str.toString();
60          str.setLength(0);
61          return ret;
62      }
63  }