ネットワークの話だとしばしば「レイヤ(層)構造」の話になります。シリアル通信でも、単純ながらそういう話はあるわけで。
まず物理層。ここは非常に単純です。ここのデータ単位は8bitがひとかたまり=1byte(まぁ、8bit以外のデータも扱えますが99.9%は8bit)。それ以外の単位はありません。y_waiwaiさんが言っている「キャッチボール」はこのレイヤの話でしょう。送信側が1byteを送る。受信側はその1byteを受け取る。それだけです。ここに複数データの概念はありません。
その上に論理層を載っけて、複雑なデータをやりとりしていきます。
とはいえ、まずは送られてきたデータを単純に1byte受け取る機能が必要ですね。それがArduinoのSerial.read()であったり、Pythonでもread()関数があります。これらで、送信側が送った1byteのデータを受信することはまず出来るようになります。
さて、プロトコル、という言葉は聞いたことがありますか。なんと訳すかな、Google翻訳は「手順」とかいうのを第一に挙げてきましたけれど。1byteのデータを、ある規約の元にまとめ上げる、決まった手順で複数データを連ねて、「複数データを」やり取りできるようにするためのお約束を決めるのです。これは、送信側と受信側で合意があれば何でもいいとも言えますが、おおむねこんなことが決まっていればやり取り出来るでしょうか。
パターン1:常に決まった数のbyte数でひとつのデータを構成する。
パターン2:送信側は、これから送信するデータの量を最初に受信側に伝える。続いて、データ本体を送信する。
パターン3:データ本体に登場しないことが明らかなデータ値(またはデータ値のパターン)があるなら、そのデータ値までが一つのデータの塊とする。
これらの組み合わせもいろいろ考えられますが、基本的なところとしてはこんなものでしょう。
パターン1の例は、例えば先行するバイトデータに256を乗じて後発のバイトデータを足して一つのデータとする...と決めておけば、1byteのデータ2個で16ビットのデータをやりとり出来るようになります。もちろん、取り決め次第で後発のデータに256を乗じて先発のデータを足すようにしてもいいのですが。(重要なのは、「送る側と受ける側が同じ約束を共有している」ことです)
パターン2は...あまり表立って使われないかな、ちょっと例示はパス。
パターン3、これがまさにreadline()がやることです。例えば数字のデータの羅列であれば、データ中に改行コードは現れません。なので、改行データを区切りにしてやれば、改行が現れるまでのデータを「ひとかたまり」と認識出来ます。さらに、カンマと改行を組み合わせてデータを区切るCSV形式なんていうのもよく使われますね。
Serial.read()だけが1byteしか読み取れない
という考え方はこの階層構造を踏まえていません。全ての受信方法は、1byte受信の上に成り立っているのです。
Arduinoのシリアルライブラリはプリミティブ(原始的というか基本的というか)な機能しか備えていないので、1byte受信しか出来ません。複数データを組み合わせるような受信は、プログラマが作らなきゃいけません。
Pythonのライブラリは、1byte受信を積み重ねて複数のデータを取り扱う機能をライブラリに持たせている、ということです。
ついでに、「やってはいけないパターン」の話もちょっとだけ。
例えば、送信側で
'1' '2' '3'
を送ったとして、これをPythonのread_all()という関数で受け取ると
'1' '2' '3'
というデータが得られる...かも知れません。ただ、これは実に信用ならない話でして、もしかして送信側がその前に
'8' '9' '0'
を送っていて、受信側がなにかの事情で受信に手間取っていたとすると、read_all()では
'0' '1' '2' '3'
が受信できてしまうかも知れません。あるいは、受信側が受信仕切る前に送信側が次の
'4' '5' '6'
を送ってしまったら、受信の際にはそれを拾ってしまって
'1' '2' '3' '4' '5'
をまとめて受信してしまうかも知れません。
さらには、タイミング次第ではそもそも
'1' '2'しか受信しなかった、('3'は次のタイミングでの受信になっちゃった)なんてことも起こりえます。
もちろん、通信の時間配分とかを送信側受信側それぞれ十分考慮して、そういうクロスオーバーが起こらないと信じられる状況ならそれもいいですけれど、普通にはそれを保証出来るかというとなかなか難しく、なのでデータ構造をしっかりと持たせて、それによってデータの区切りを決めないともしかして怪しい動きをするソフトが出来てしまうかもしれません。(これはシリアルよりもTCP/IPの通信でそういうプログラムを組む人がしばしばいて危険なのですが...)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。