resolveData() {
        while (this.unresolvedLength >= this.bufferSize) {
            let buffer;
            if (this.incoming.length > 0) {
                buffer = this.incoming.shift();
                this.shiftBufferFromUnresolvedDataArray(buffer);
            }
            else {
                if (this.numBuffers < this.maxBuffers) {
                    buffer = this.shiftBufferFromUnresolvedDataArray();
                    this.numBuffers++;
                }
                else {
                    // No available buffer, wait for buffer returned
                    return false;
                }
            }
            this.outgoing.push(buffer);
            this.triggerOutgoingHandlers();
        }
        return true;
    }
Resolve data in unresolvedDataArray. For every buffer with size in blockSize
shifted, it will try to get (or allocate a buffer) from incoming, and fill it,
then push it into outgoing to be handled by outgoing handler.

Return false when available buffers in incoming are not enough, else true.

@returns Return false when buffers in incoming are not enough, else true.