public abstract class

CharEscaper

extends Object
implements Escaper
java.lang.Object
   ↳ com.google.gdata.util.common.base.CharEscaper

Class Overview

An object that converts literal text into a format safe for inclusion in a particular context (such as an XML document). Typically (but not always), the inverse process of "unescaping" the text is performed automatically by the relevant parser.

For example, an XML escaper would convert the literal string "Foo<Bar>" into "Foo&lt;Bar&gt;" to prevent "<Bar>" from being confused with an XML tag. When the resulting XML document is parsed, the parser API will return this text as the original literal string "Foo<Bar>".

A CharEscaper instance is required to be stateless, and safe when used concurrently by multiple threads.

Several popular escapers are defined as constants in the class CharEscapers. To create your own escapers, use CharEscaperBuilder, or extend this class and implement the escape(char) method.

Summary

Constants
int DEST_PAD The amount of padding to use when growing the escape buffer.
Fields
private static final ThreadLocal<char[]> DEST_TL A thread-local destination buffer to keep us from creating new buffers.
Public Constructors
CharEscaper()
Public Methods
String escape(String string)
Returns the escaped form of a given literal string.
Appendable escape(Appendable out)
Returns an Appendable instance which automatically escapes all text appended to it before passing the resulting text to an underlying Appendable.
Protected Methods
abstract char[] escape(char c)
Returns the escaped form of the given character, or null if this character does not need to be escaped.
String escapeSlow(String s, int index)
Returns the escaped form of a given literal string, starting at the given index.
[Expand]
Inherited Methods
From class java.lang.Object
From interface com.google.gdata.util.common.base.Escaper

Constants

private static final int DEST_PAD

The amount of padding to use when growing the escape buffer.

Constant Value: 32 (0x00000020)

Fields

private static final ThreadLocal<char[]> DEST_TL

A thread-local destination buffer to keep us from creating new buffers. The starting size is 1024 characters. If we grow past this we don't put it back in the threadlocal, we just keep going and grow as needed.

Public Constructors

public CharEscaper ()

Public Methods

public String escape (String string)

Returns the escaped form of a given literal string.

Parameters
string The literal string to be escaped
Returns
  • the escaped form of string
Throws
NullPointerException if string is null

public Appendable escape (Appendable out)

Returns an Appendable instance which automatically escapes all text appended to it before passing the resulting text to an underlying Appendable.

The methods of the returned object will propagate any exceptions thrown by the underlying Appendable, and will throw NullPointerException if asked to append null, but do not otherwise throw any exceptions.

The escaping behavior is identical to that of escape(String), so the following code is always equivalent to escaper.escape(string):

   StringBuilder sb = new StringBuilder();
   escaper.escape(sb).append(string);
   return sb.toString();

Parameters
out The underlying Appendable to append escaped output to
Returns
  • an Appendable which passes text to out after escaping it
Throws
NullPointerException if out is null.

Protected Methods

protected abstract char[] escape (char c)

Returns the escaped form of the given character, or null if this character does not need to be escaped. If an empty array is returned, this effectively strips the input character from the resulting text.

If the character does not need to be escaped, this method should return null, rather than a one-character array containing the character itself. This enables the escaping algorithm to perform more efficiently.

An escaper is expected to be able to deal with any char value, so this method should not throw any exceptions.

Parameters
c The character to escape if necessary
Returns
  • the replacement characters, or null if no escaping was needed

protected String escapeSlow (String s, int index)

Returns the escaped form of a given literal string, starting at the given index. This method is called by the escape(String) method when it discovers that escaping is required. It is protected to allow subclasses to override the fastpath escaping function to inline their escaping test. See CharEscaperBuilder for an example usage.

Parameters
s The literal string to be escaped
index The index to start escaping from
Returns
  • the escaped form of string
Throws
NullPointerException if string is null