Beispiel #1
0
 /*
 val= 393220
 val= 1
 val= 3817105751 t=10982
  */
 public static void testAdler()
 {
     Console.WriteLine("Testing Adler32");
     Adler32 crc1 = new Adler32();
     crc1.Update(new byte[] { 1, 2 });
     Console.WriteLine("val= " + crc1.GetValue());
     if (crc1.GetValue() != 393220) throw new Exception("Bad Adler32!");
     crc1.Reset();
     Console.WriteLine("val= " + crc1.GetValue());
     if (crc1.GetValue() != 1) throw new Exception("Bad Adler32!!");
     Random r = new Random();
     byte[] all = new byte[2000 * 4];
     long t0 = Environment.TickCount;
     for (int n = 0; n < 2000; n++) {
         byte[] b = createBytes7(n < 50 ? n : n * n - 7);
         Adler32 crc = new Adler32();
         int offset = 0;
         while (offset < b.Length) {
             int len = r.Next(b.Length - offset) + 1;
             crc.Update(b, offset, len);
             offset += len;
         }
         long x = crc.GetValue();
         all[n * 4] = (byte)((x >> 24) & 0xff);
         all[n * 4 + 1] = (byte)((x >> 16) & 0xff);
         all[n * 4 + 2] = (byte)((x >> 8) & 0xff);
         all[n * 4 + 3] = (byte)((x ) & 0xff);
     }
     long t1 = Environment.TickCount;
     Adler32 a = new Adler32();
     a.Update(all);
     long v = a.GetValue();
     Console.WriteLine("val= " + v + " t=" + (t1 - t0));
     if (v != 3817105751) throw new Exception("Bad Adler32");// tested with Java CRC32
 }
Beispiel #2
0
        public virtual void Close()
        {
            if (!initdone)
            {
                doInit();            // can happen if never called write
            }
            if (closed)
            {
                return;
            }
            closed = true;
            // sigh ... no only must I close the parent stream to force a flush, but I must save a reference
            // raw stream because (apparently) Close() sets it to null (shame on you, MS developers)
            if (deflateStream != null)
            {
                deflateStream.Dispose();
            }
            else             // second hack: empty input?
            {
                rawStream.WriteByte(3);
                rawStream.WriteByte(0);
            }
            // add crc
            uint crcv = adler32.GetValue();

            rawStream.WriteByte((byte)((crcv >> 24) & 0xFF));
            rawStream.WriteByte((byte)((crcv >> 16) & 0xFF));
            rawStream.WriteByte((byte)((crcv >> 8) & 0xFF));
            rawStream.WriteByte((byte)((crcv) & 0xFF));
            if (!leaveOpen)
            {
                rawStream.Dispose();
            }
        }
Beispiel #3
0
 protected override void Dispose(bool disposing)
 {
     if (!initdone)
     {
         doInit();
     }
     if (!closed)
     {
         closed = true;
         if (deflateStream != null)
         {
             deflateStream.Dispose();
         }
         else
         {
             rawStream.WriteByte(3);
             rawStream.WriteByte(0);
         }
         uint value = adler32.GetValue();
         rawStream.WriteByte((byte)((value >> 24) & 0xFF));
         rawStream.WriteByte((byte)((value >> 16) & 0xFF));
         rawStream.WriteByte((byte)((value >> 8) & 0xFF));
         rawStream.WriteByte((byte)(value & 0xFF));
         if (!leaveOpen)
         {
             rawStream.Dispose();
         }
     }
 }