コード例 #1
0
        // Internal methods

        internal int ReadContentAsBase64(byte[] buffer, int index, int count)
        {
            // check arguments
            if (buffer == null)
            {
                throw new ArgumentNullException("buffer");
            }
            if (count < 0)
            {
                throw new ArgumentOutOfRangeException("count");
            }
            if (index < 0)
            {
                throw new ArgumentOutOfRangeException("index");
            }
            if (buffer.Length - index < count)
            {
                throw new ArgumentOutOfRangeException("count");
            }

            switch (_state)
            {
            case State.None:
                if (!_reader.CanReadContentAs())
                {
                    throw _reader.CreateReadContentAsException("ReadContentAsBase64");
                }
                if (!Init())
                {
                    return(0);
                }
                break;

            case State.InReadContent:
                // if we have a correct decoder, go read
                if (_decoder == _base64Decoder)
                {
                    // read more binary data
                    return(ReadContentAsBinary(buffer, index, count));
                }
                break;

            case State.InReadElementContent:
                throw new InvalidOperationException(ResXml.Xml_MixingBinaryContentMethods);

            default:
                Debug.Assert(false);
                return(0);
            }

            Debug.Assert(_state == State.InReadContent);

            // setup base64 decoder
            InitBase64Decoder();

            // read more binary data
            return(ReadContentAsBinary(buffer, index, count));
        }