It creates a situation where the transports accumulate bytes into Data (copy 1), converts that to a String (copy 2), then the Client receives the String, converts it back into Data (copy 3) to decode into Message (copy 4).
You can probably eliminate copy 2 and 3 by using Data in Transport protocol definition instead of String.