Reads at most lengthbytes from the
I/O stream, or to the end of file if length is omitted or is nil.
length must be a non-negative integer or nil. If the optional
buffer argument is present, it must reference a String, which will receive the data.
At end of file, it returns nil or “” depend on length.
ios.read() and ios.read(nil) returns “”. ios.read(positive-integer) returns nil.