the third param of readFully is len, not end