It depends on your application. If it needs to wait, then either method is fine. But if your app needs to do something else in between, it better to read each piece when it's ready than waiting for whole thing because Serial is very slow.
The processor does have other things to do so if I keep the concept of reading all at once I will change the while to "if"
I know my data will not exceed 128. I was planning on the last byte to be something above 128.
My source sends the data in one "burst" every 10 seconds. The data will always be 15 bytes. This is the reason I considered waiting for all data in the first place. However I will add a verification the serial.available is 0 after I read the data.
And of course I will change the 14 to 15 to read all the bytes.
Personally I prefer to use every single byte, like
I have a array of recived data and a index for that array.
In loop there is an if Serial available
In the if the index th part of array decame the Serial.read and the index increes.
If the index is egual to maximum+1 I call a fumction that use the array. I have all the message
If you know that he data stream will always be (at least) 14 bytes, instead of using while(Serial.available() < 14), which blocks, you can change that to if(Serial.available >= 14) and the loop the contents into an array. Not the preferred solution, but an option. Better to follow the advice already given and save the values into a buffer as they arrive. You'll still want to change out the while (blocking) statement and the count the bytes until all have arrived. Better yet if there is a terminating character on the data stream.