using System; using System.IO; /* * Reference arithmetic coding * Copyright (c) Project Nayuki * * https://www.nayuki.io/page/reference-arithmetic-coding * https://github.com/nayuki/Reference-arithmetic-coding */ /// /// Decompression application using adaptive arithmetic coding. /// Usage: java AdaptiveArithmeticDecompress InputFile OutputFile /// This decompresses files generated by the "AdaptiveArithmeticCompress" application. /// public class AdaptiveArithmeticDecompress { //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: //ORIGINAL LINE: public static void main(String[] args) throws java.io.IOException public static void Main(string[] args) { /* @@@@ PORT // Handle command line arguments if (args.Length != 2) { Console.Error.WriteLine("Usage: java AdaptiveArithmeticDecompress InputFile OutputFile"); Environment.Exit(1); return; } File inputFile = new File(args[0]); File outputFile = new File(args[1]); // Perform file decompression using (BitInputStream @in = new BitInputStream(new BufferedInputStream(new FileStream(inputFile, FileMode.Open, FileAccess.Read))), Stream @out = new BufferedOutputStream(new FileStream(outputFile, FileMode.Create, FileAccess.Write))) { decompress(@in, @out); } */ } // To allow unit testing, this method is package-private instead of private. //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: //ORIGINAL LINE: static void decompress(BitInputStream in, java.io.OutputStream out) throws java.io.IOException internal static void decompress(BitInputStream @in, Stream @out) { FlatFrequencyTable initFreqs = new FlatFrequencyTable(257); FrequencyTable freqs = new SimpleFrequencyTable(initFreqs); ArithmeticDecoder dec = new ArithmeticDecoder(32, @in); while (true) { // Decode and write one byte int symbol = dec.read(freqs); if (symbol == 256) // EOF symbol { break; } @out.WriteByte((byte)symbol); freqs.increment(symbol); } } }