detachInterupt() from the inside of the interupt function?

The loop() could run fast enough to read every data byte, so perhaps a buffer is not needed. Perhaps a counter could be added to detect a missing byte. If the data is not needed, it is okay to let the interrupt still be active.