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