byte is an unsigned 8-bit integer whose values range from 0 to 255.
char is a 16-bit unicode character type. If you want to represent raw streams of bytes, you'll use bytes. You could also parse the stream of bytes by assuming it uses some sort of encoding, like UTF-8 or ASCII or something, outputting a stream of chars. A char is basically a UTF-16 encoded array -- not all unicode characters can fit in one char -- some take two.
Edit: I'm kind of extrapolating when it comes to my statement that a char is supposed to be a UTF-16 encoded array. I would expect people to use string instead of char, and I know I read somewhere that string is encoded in UTF-16.