Baştan Sona C#

Page 470

1 -) .huff uzantılı dosyadan sembol frekansları okunur ve Hashtable nesnesine yerleştirilir. 2 -) Frekans tablosu kullanılarak Huffman ağacı oluşturulur. 3 -) Huffman ağacı kullanılarak Huffman kodları oluşturulur. 4 -) .huff uzantılı dosyanın data bölümünden sıkıştırılmış veri dizisi okunarak huffman kodları ile karşılaştırılarak orjinal metin bulunur ve .txt uzantılı dosyaya yazılır. 2. ve 3. adımlardaki işlemler sıkıştırma yapıldığında kullanılan işlemler ile aynıdır. Burada ayrıca değenmeye gerek yoktur. Bu aşamada önemli olan verilen okunması ve yazılmasında izlenen yoldur. Verilerin okunmasında ve tekrar yazılmasında StringBuilder sınıfı kullanılmıştır. Bu sınıf string nesnesine göre oldukça iyi performans göstermektedir. Örneğin aynı işlemi string ile yaptığımda 75 K'lık bir dosya açma işlemi 30 sn sürerken StringBuilder kullandığımda 2 sn sürmektedir. 1.aşamdaki işlemi yapacak metot aşağıdaki gibidir. private System.Text.StringBuilder CompressedData = new System.Text.StringBuilder(""); private void ReadCompressedFile() { FileStream fs = File.Open(file,FileMode.Open,FileAccess.Read); //İlk önce sembol sayısını bulalım. byte[] byteK = new byte[4]; for(int i=0 ; i<4 ; i++) { byteK[i] = (byte)fs.ReadByte(); } int SymbolCount = BitConverter.ToInt32(byteK,0); int RemainderBitCount = (byte)fs.ReadByte(); for(int k = 0; k < SymbolCount ; k++) { //Sembollerin elde edilmesi(2 byte) byte[] symbolB = new byte[2]; symbolB[0] = (byte)fs.ReadByte(); symbolB[1] = (byte)fs.ReadByte(); char cSymbol = BitConverter.ToChar(symbolB,0); //Frekans bilgisinin elde edilmesi(4 byte) byte[] freqB = new byte[4]; for(int j=0 ; j<4 ; j++) { freqB[j] = (byte)fs.ReadByte(); }


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.