this keep allocate new buffer for each read, is there better way to reuse one existed buffer like before?