* 使用pipe传递数据，更加简洁
* 使用chan的长度而非buffer的长度，更加精确不容易出错