Exemple #1
0
        public Stream Read(Stream stream, PbpEntryType entryType)
        {
            if (_entries.ContainsKey(entryType) == false)
            {
                return(null);
            }
            PbpEntry entry = _entries[entryType];

            stream.Seek(entry.Offset, SeekOrigin.Begin);
            byte[] buffer = new byte[entry.Length];
            stream.Read(buffer, 0, ( int )entry.Length);

            return(new MemoryStream(buffer, 0, buffer.Length, false, false));
        }
Exemple #2
0
        private bool Parse(BinaryReader reader)
        {
            PbpHeader header = new PbpHeader(reader);

            if ((header.Magic[0] != 0) ||
                (header.Magic[1] != 'P') ||
                (header.Magic[2] != 'B') ||
                (header.Magic[3] != 'P'))
            {
                // Bad
                return(false);
            }

            //uint lastOffset = 0;
            for (int n = 0; n < PbpEntryCount; n++)
            {
                uint offset = header.Offsets[n];

                uint length;
                if (n < PbpEntryCount - 1)
                {
                    length = header.Offsets[n + 1] - offset;
                }
                else
                {
                    length = ( uint )reader.BaseStream.Length - offset;
                }
                if (length == 0)
                {
                    continue;
                }

                PbpEntry entry = new PbpEntry();
                entry.EntryType = ( PbpEntryType )n;
                entry.Offset    = offset;
                entry.Length    = length;
                _entries.Add(entry.EntryType, entry);
            }

            return(true);
        }
Exemple #3
0
        private bool Parse( BinaryReader reader )
        {
            PbpHeader header = new PbpHeader( reader );
            if( ( header.Magic[ 0 ] != 0 ) ||
                ( header.Magic[ 1 ] != 'P' ) ||
                ( header.Magic[ 2 ] != 'B' ) ||
                ( header.Magic[ 3 ] != 'P' ) )
            {
                // Bad
                return false;
            }

            //uint lastOffset = 0;
            for( int n = 0; n < PbpEntryCount; n++ )
            {
                uint offset = header.Offsets[ n ];

                uint length;
                if( n < PbpEntryCount - 1 )
                {
                    length = header.Offsets[ n + 1 ] - offset;
                }
                else
                    length = ( uint )reader.BaseStream.Length - offset;
                if( length == 0 )
                    continue;

                PbpEntry entry = new PbpEntry();
                entry.EntryType = ( PbpEntryType )n;
                entry.Offset = offset;
                entry.Length = length;
                _entries.Add( entry.EntryType, entry );
            }

            return true;
        }