public CharBlockArray append(char[] chars, int start, int length) {int offset = start;int remain = length;while (remain > 0) {if (this.current.length == this.blockSize) {addBlock();}int toCopy = remain;int remainingInBlock = this.blockSize - this.current.length;if (remainingInBlock < toCopy) {toCopy = remainingInBlock;}System.arraycopy(chars, offset, this.current.chars, this.current.length, toCopy);offset += toCopy;remain -= toCopy;this.current.length += toCopy;}this.length += length;return this;}

public virtual CharBlockArray Append(char[] chars, int start, int length){int offset = start;int remain = length;while (remain > 0){if (this.current.length == this.blockSize){AddBlock();}int toCopy = remain;int remainingInBlock = this.blockSize - this.current.length;if (remainingInBlock < toCopy){toCopy = remainingInBlock;}Array.Copy(chars, offset, this.current.chars, this.current.length, toCopy);offset += toCopy;remain -= toCopy;this.current.length += toCopy;}this.length += length;return this;}
