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); }
/// <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); }