コード例 #1
0
        internal IPListElement ReadInternal()
        {
            byte[] buffer = new byte[1];
            if (this.BaseStream.Read(buffer, 0, buffer.Length) != 1)
            {
                throw new PListFormatException("Didn't read type Byte");
            }
            int  length   = (int)buffer[0] & 15;
            byte typeCode = (byte)((int)buffer[0] >> 4 & 15);

            if ((int)typeCode != 0 && length == 15)
            {
                IPListElement plistElement = this.ReadInternal();
                if (!(plistElement is PListInteger))
                {
                    throw new PListFormatException("Element Len is no Integer");
                }
                length = (int)((PListElement <long>)plistElement).Value;
            }
            IPListElement plistElement1          = PListElementFactory.Instance.Create(typeCode, length);
            byte          currentElementTypeCode = this.CurrentElementTypeCode;
            int           currentElementLength   = this.CurrentElementLength;

            this.CurrentElementTypeCode = typeCode;
            this.CurrentElementLength   = length;
            plistElement1.ReadBinary(this);
            this.CurrentElementTypeCode = currentElementTypeCode;
            this.CurrentElementLength   = currentElementLength;
            return(plistElement1);
        }
コード例 #2
0
        /// <summary>
        /// Reads the <see cref="T:CE.iPhone.IPListElemnet"/> at the current stream position.
        /// </summary>
        /// <returns>The <see cref="T:CE.iPhone.IPListElemnet"/> at the current stream position.</returns>
        internal IPListElement ReadInternal()
        {
            Byte[] buf = new Byte[1];
            if (BaseStream.Read(buf, 0, buf.Length) != 1)
            {
                throw new PListFormatException("Didn't read type Byte");
            }

            Int32 objLen   = buf[0] & 0x0F;
            Byte  typeCode = (Byte)((buf[0] >> 4) & 0x0F);

            if (typeCode != 0 && objLen == 0x0F)
            {
                IPListElement lenElem = ReadInternal();
                if (!(lenElem is PListInteger))
                {
                    throw new PListFormatException("Element Len is no Integer");
                }
                objLen = (Int32)((PListInteger)lenElem).Value;
            }

            IPListElement elem = PListElementFactory.Instance.Create(typeCode, objLen);

            Byte  tempElementTypeCode = CurrentElementTypeCode;
            Int32 tempElementLength   = CurrentElementLength;

            CurrentElementTypeCode = typeCode;
            CurrentElementLength   = objLen;

            elem.ReadBinary(this);

            CurrentElementTypeCode = tempElementTypeCode;
            CurrentElementLength   = tempElementLength;

            return(elem);
        }