I'm trying to write a generic arithmetic coder using partial prediction matching on a byte-by-byte basis, but am stuck on a pretty basic point.
I understand that there are two approaches to letting the decoder know when we've reached the end of the message - either transmitting the number of bytes that were encoded at the start of the message, or by including a special symbol in the coded message to signify the end of the message.
I don't understand how the latter is possible! Surely any byte that we might want to use as the end-of-message symbol could equally be a part of the message itself? i.e. we can't assign any of the 256 possible byte values as the end-of-message symbol, so how can an end-of-message symbol be transmitted?
Thanks in advance for your help.