void EnsureWriteBase64State(byte[] buffer, int index, int count)
        {
            ThrowIfClosed();
            ByteStreamMessageUtility.EnsureByteBoundaries(buffer, index, count, false);

            if (this.state != ByteStreamWriterState.Content && this.state != ByteStreamWriterState.StartElement)
            {
                throw FxTrace.Exception.AsError(
                          new InvalidOperationException(SR.XmlWriterMustBeInElement(ByteStreamWriterStateToWriteState(this.state))));
            }
        }
        public override int ReadContentAsBase64(byte[] buffer, int index, int count)
        {
            EnsureInContent();
            ByteStreamMessageUtility.EnsureByteBoundaries(buffer, index, count, true);

            if (count == 0)
            {
                return(0);
            }

            Stream stream       = this.GetStream();
            int    numBytesRead = stream.Read(buffer, index, count);

            if (numBytesRead == 0)
            {
                this.position = ReaderPosition.EndElement;
            }
            return(numBytesRead);
        }
        public override int ReadContentAsBase64(byte[] buffer, int index, int count)
        {
            EnsureInContent();
            ByteStreamMessageUtility.EnsureByteBoundaries(buffer, index, count, true);

            if (count == 0)
            {
                return(0);
            }

            int bytesToCopy = Math.Min(bufferedMessageData.Buffer.Count - this.offset, count);

            if (bytesToCopy == 0)
            {
                this.position = ReaderPosition.EndElement;
                return(0);
            }

            Buffer.BlockCopy(this.bufferedMessageData.Buffer.Array, this.offset, buffer, index, bytesToCopy);
            this.offset += bytesToCopy;

            return(bytesToCopy);
        }