1 /* 2 * FilterOptions 3 * 4 * Authors: Lasse Collin <lasse.collin@tukaani.org> 5 * Igor Pavlov <http://7-zip.org/> 6 * 7 * This file has been put into the public domain. 8 * You can do whatever you want with this file. 9 */ 10 11 package org.tukaani.xz; 12 13 import java.io.InputStream; 14 import java.io.IOException; 15 16 /** 17 * Base class for filter-specific options classes. 18 */ 19 public abstract class FilterOptions implements Cloneable { 20 /** 21 * Gets how much memory the encoder will need with 22 * the given filter chain. This function simply calls 23 * <code>getEncoderMemoryUsage()</code> for every filter 24 * in the array and returns the sum of the returned values. 25 */ getEncoderMemoryUsage(FilterOptions[] options)26 public static int getEncoderMemoryUsage(FilterOptions[] options) { 27 int m = 0; 28 29 for (int i = 0; i < options.length; ++i) 30 m += options[i].getEncoderMemoryUsage(); 31 32 return m; 33 } 34 35 /** 36 * Gets how much memory the decoder will need with 37 * the given filter chain. This function simply calls 38 * <code>getDecoderMemoryUsage()</code> for every filter 39 * in the array and returns the sum of the returned values. 40 */ getDecoderMemoryUsage(FilterOptions[] options)41 public static int getDecoderMemoryUsage(FilterOptions[] options) { 42 int m = 0; 43 44 for (int i = 0; i < options.length; ++i) 45 m += options[i].getDecoderMemoryUsage(); 46 47 return m; 48 } 49 50 /** 51 * Gets how much memory the encoder will need with these options. 52 */ getEncoderMemoryUsage()53 public abstract int getEncoderMemoryUsage(); 54 55 /** 56 * Gets a raw (no XZ headers) encoder output stream using these options. 57 * Raw streams are an advanced feature. In most cases you want to store 58 * the compressed data in the .xz container format instead of using 59 * a raw stream. To use this filter in a .xz file, pass this object 60 * to XZOutputStream. 61 * <p> 62 * This is uses ArrayCache.getDefaultCache() as the ArrayCache. 63 */ getOutputStream(FinishableOutputStream out)64 public FinishableOutputStream getOutputStream(FinishableOutputStream out) { 65 return getOutputStream(out, ArrayCache.getDefaultCache()); 66 } 67 68 /** 69 * Gets a raw (no XZ headers) encoder output stream using these options 70 * and the given ArrayCache. 71 * Raw streams are an advanced feature. In most cases you want to store 72 * the compressed data in the .xz container format instead of using 73 * a raw stream. To use this filter in a .xz file, pass this object 74 * to XZOutputStream. 75 */ getOutputStream( FinishableOutputStream out, ArrayCache arrayCache)76 public abstract FinishableOutputStream getOutputStream( 77 FinishableOutputStream out, ArrayCache arrayCache); 78 79 /** 80 * Gets how much memory the decoder will need to decompress the data 81 * that was encoded with these options. 82 */ getDecoderMemoryUsage()83 public abstract int getDecoderMemoryUsage(); 84 85 /** 86 * Gets a raw (no XZ headers) decoder input stream using these options. 87 * <p> 88 * This is uses ArrayCache.getDefaultCache() as the ArrayCache. 89 */ getInputStream(InputStream in)90 public InputStream getInputStream(InputStream in) throws IOException { 91 return getInputStream(in, ArrayCache.getDefaultCache()); 92 } 93 94 /** 95 * Gets a raw (no XZ headers) decoder input stream using these options 96 * and the given ArrayCache. 97 */ getInputStream( InputStream in, ArrayCache arrayCache)98 public abstract InputStream getInputStream( 99 InputStream in, ArrayCache arrayCache) throws IOException; 100 getFilterEncoder()101 abstract FilterEncoder getFilterEncoder(); 102 FilterOptions()103 FilterOptions() {} 104 } 105