Solidity docs says
It is possible to use an array of bytes as byte, but it is wasting a lot of space, 31 bytes every element, to be exact, when passing in calls. It is better to use bytes.
As a rule of thumb, use bytes for arbitrary-length raw byte data and string for arbitrary-length string (UTF-8) data. If you can limit the length to a certain number of bytes, always use one of bytes1 to bytes32 because they are much cheaper.
Are there any clear examples that I can understand?