RIFE uses an internal template construction format that optimizes construction a lot by deferring memory allocation. It also offers late value replacement which allows constructions to be performed at any moment with only the data that's available at a certain time. If a value can't be replaced, its position will be remembered and it will be replaced at the first occasion where it actually is available.
For complex template constructions (like recursive trees for example) it's handy to construct values independently in a stack of local scopes. This could before be done by retrieving the contents of the blocks as strings and by appending these to a regular StringBuffer. However, this made you lose all the advantages of the internal construction format. Therefore, it's now possible to use the internal format directly. You obtain such an InternalValue like this (assuming that template is an instance of Template):
InternalValue value = template.createInternalValue();
You can use similar construction methods on it as when you work with the template directly : appendBlock(), appendValue(), clear(), equals(), check the javadocs for details. Note that you can't really do anything else than construct values with an InternalValue. It's tightly bound to the template you instantiated it from and it will always refer to it to try to resolve values that need to be replaced in blocks that you append. The template will allow you to re-integrate the internal value through additional setValue(InternalValue value) and appendValue(InternalValue value) methods.