上一篇说到Print类,是用来将各种数据打印出来的类。Stream类继承了Print,添加了数据的读取和转换功能。同样由于不知道底层实现,跟Print类似,将底层的实现申明为虚函数。
Stream
读取数据时,可能当前没有数据可读取但数据很快就传送过来,也可能根本就没有数据,为了适应这种不确定性,设定了超时读取时间,超过这个时间还没有读取到数据则读取失败。
protected:
unsigned long _timeout;
这个时间是以毫秒为单位的,默认1000ms。如果要更改超时时间,可以用函数:
void setTimeout(unsigned long timeout);
Stream类中并不知道是通过什么硬件读取数据的,因此并不知道如何去读取数据。与Print类类似,将这样底层函数申明为虚函数,需要在子类中实现。
Stream申明了4个虚函数:
virtual int available() = 0;//判断当前是否有可读取的数据
virtual int read() = 0;//读取一个字节并丢弃
virtual int peek() = 0;//读取这个字节但不丢弃,此时如果在读取的话还是同样的数据
virtual void flush() = 0;//将缓冲区中的数据发送出去
还有一些实用函数,在接收到的数据中查找,find和finduntil函数所有的查找最终都是通过调用一个函数实现的,在接收到的数据中查找target,查找到target或者超时或者查找到terminator就结束。
bool Stream: