The data gets transfered TO the port in a low rate but once it reaches the port (bytesAvailable()>0) it's read from a buffer. So if you experience a delay it might be that there is no data to be read and your read() call blocks until some data is returned. So before reading check if there is anything to be read.