Is byte datatype a solely Arduino construct?
Yes. Much of the Arduino "language" is "bent" to look like Java, since it originated from Processing, which is Java. So we have data types the "look like" Java ones, including "byte" for "unsigned char" and "boolean" for "bool".
If so, why is it recommended over char?
Personally I don't ever recommend using it, since it's non-standard. Instead you should use
uint8_t which is essentially the same thing, but portable.
It is recommended to use "hard signedness" data types for portability. The problem with
char is that whether it is signed or not is entirely down to the compiler implementation. Some systems have it as signed, some as unsigned. By using
byte (or better,
uint8_t) you are always going to get an unsigned 8-bit value.
For just storing of binary data it doesn't really make any difference, but when it comes to doing mathematics with the stored data you may find you suddenly have negative values when you don't want negative values (a
char might be storing your number as -128 to +127, not 0 to 255).