コード例 #1
0
        public void Write(Stream fileStream)
        {
            // SETUP
            sida.Size  = count * 8;
            sida.Entry = new SidaEntry[count];
            List <byte> keys = new List <byte>(sidb.Size), values = new List <byte>(lngb.Size);

            byte[] keyBytes, valueBytes;
            int    keyOffset = 0, valueOffset = 0;
            int    index = 0;

            foreach (HashEntry entry in hsht.Entries)
            {
                sida.Entry[index].KeyOffset   = keyOffset;
                sida.Entry[index].ValueOffset = valueOffset;

                keyBytes   = encoding.GetBytes(entry.Key);
                valueBytes = encoding.GetBytes(entry.Value);
                keys.AddRange(keyBytes);
                keys.Add(0x00);
                values.AddRange(valueBytes);
                values.Add(0x00);

                keyOffset   += keyBytes.Length + 1;
                valueOffset += valueBytes.Length + 1;
                index++;
            }
            sidb.Size = keyOffset;
            lngb.Size = valueOffset;

            // Write
            using (LngBinaryWriter b = new LngBinaryWriter(BigEndianBitConverter.Big, fileStream))
            {
                b.Write(magic);
                // Final size = all section sizes + hshsSize12 + 5 * 4byte magics + 5 * 4byte sizes + sidanumEntries + lngtmagic + lngsize
                b.Write(0);

                hshs.Write(b);
                hsht.Write(b);

                sida.Write(b);
                // SIDB
                b.Write(sidb.Magic);
                b.Write(sidb.Size);
                b.Write(keys.ToArray());
                // LNGB
                b.Write(lngb.Magic);
                b.Write(lngb.Size);
                b.Write(values.ToArray());

                b.Seek(4, SeekOrigin.Begin);
                b.Write((int)b.BaseStream.Length);
            }

            hasChanges = false;
        }
コード例 #2
0
        public void Write(Stream fileStream)
        {
            // SETUP
            sida.Size = count * 8;
            sida.Entry = new SidaEntry[count];
            List<byte> keys = new List<byte>(sidb.Size), values = new List<byte>(lngb.Size);
            byte[] keyBytes, valueBytes;
            int keyOffset = 0, valueOffset = 0;
            int index = 0;
            foreach (HashEntry entry in hsht.Entries)
            {
                sida.Entry[index].KeyOffset = keyOffset;
                sida.Entry[index].ValueOffset = valueOffset;

                keyBytes = encoding.GetBytes(entry.Key);
                valueBytes = encoding.GetBytes(entry.Value);
                keys.AddRange(keyBytes);
                keys.Add(0x00);
                values.AddRange(valueBytes);
                values.Add(0x00);

                keyOffset += keyBytes.Length + 1;
                valueOffset += valueBytes.Length + 1;
                index++;
            }
            sidb.Size = keyOffset;
            lngb.Size = valueOffset;

            // Write
            using (LngBinaryWriter b = new LngBinaryWriter(BigEndianBitConverter.Big, fileStream))
            {
                b.Write(magic);
                // Final size = all section sizes + hshsSize12 + 5 * 4byte magics + 5 * 4byte sizes + sidanumEntries + lngtmagic + lngsize
                b.Write(0);

                hshs.Write(b);
                hsht.Write(b);

                sida.Write(b);
                // SIDB
                b.Write(sidb.Magic);
                b.Write(sidb.Size);
                b.Write(keys.ToArray());
                // LNGB
                b.Write(lngb.Magic);
                b.Write(lngb.Size);
                b.Write(values.ToArray());

                b.Seek(4, SeekOrigin.Begin);
                b.Write((int)b.BaseStream.Length);
            }

            hasChanges = false;
        }