don't allocate a StringBuilder pre-emptively when deserializing
don't allocate a char[] when it won't be needed (which is rare, but possible)
don't put a StringBuilder local on the stack when we're in one of those rare cases where we can prove it's not necessary