You can’t.
Your code must cope with the data being delivered in arbitrarily-sized “fragments”
No - it isn’t, I’m afraid.
Yes - that is what you have to do!
This isn’t really any different from programming a “normal” buffered UART in a “normal” microcontroller.
Or even on a PC…