Core's handling of unicode string packing is, not to put too fine a point on it, wrong.
OutputBuffer's packString(String s) assumes the serialized form of a UTF-8 string has the same number of bytes as the String has code units, which is incorrect for any String containing multi-byte code units.
Since that needs fixing anyhow, the refactoring pulls out the byte packing to a separate function from the String encoding, additionally enabling a performance optimization:
Where a fixed String is packed frequently, the transformation to byte can be done once and cached, eliding memory allocation and processing on subsequent invocations. This is particularly useful for the StateManager marker, which is packed to buffers with great frequency.