Unpacker cannot distinguish 2 and 3. If we are going to support this, MessageBufferInput should detect the difference between no more data, waiting next data and the end of stream (or broken stream).