예제 #1
0
        public void CalculatesCorrectChecksum()
        {
            var data = new byte[]
            {
                0,
                255, 0, 0,
                0, 0, 0,
                0,
                0, 0, 0,
                255, 0, 0
            };

            var checksum = Adler32Checksum.Calculate(data);

            Assert.Equal(268304895, checksum);
        }
예제 #2
0
        public void CalculatesCorrectChecksumWithLengthArgument()
        {
            var data = new byte[]
            {
                0,
                255, 0, 0,
                0, 0, 0,
                0,
                0, 0, 0,
                255, 0, 0,
                44, 12, 126, 200
            };

            var checksum = Adler32Checksum.Calculate(data, 14);

            Assert.Equal(268304895, checksum);
        }
예제 #3
0
파일: FlateFilter.cs 프로젝트: xtuzy/PdfPig
        public byte[] Encode(Stream input, DictionaryToken streamDictionary, int index)
        {
            const int headerLength   = 2;
            const int checksumLength = 4;

            byte[] data;
            using (var temp = new MemoryStream())
            {
                input.CopyTo(temp);
                data = temp.ToArray();
            }

            using (var compressStream = new MemoryStream())
                using (var compressor = new DeflateStream(compressStream, CompressionLevel.Fastest))
                {
                    compressor.Write(data, 0, data.Length);
                    compressor.Close();

                    var compressed = compressStream.ToArray();

                    var result = new byte[headerLength + compressed.Length + checksumLength];

                    // Write the ZLib header.
                    result[0] = Deflate32KbWindow;
                    result[1] = ChecksumBits;

                    // Write the compressed data.
                    Array.Copy(compressed, 0, result, headerLength, compressed.Length);

                    // Write Checksum of raw data.
                    var checksum = Adler32Checksum.Calculate(data);

                    var offset = headerLength + compressed.Length;

                    result[offset++] = (byte)(checksum >> 24);
                    result[offset++] = (byte)(checksum >> 16);
                    result[offset++] = (byte)(checksum >> 8);
                    result[offset]   = (byte)(checksum >> 0);

                    return(result);
                }
        }