1 52 53 package com.go.trove.util; 54 55 import java.util.*; 56 57 65 public class DeflaterPool { 66 private static final int LIMIT; 67 68 private static List cPool; 69 private static List cNoWrapPool; 70 71 static { 72 LIMIT = Integer.getInteger("com.go.trove.util.DeflaterPool.LIMIT", 8).intValue(); 73 } 74 75 public static synchronized void clear() { 76 if (cPool != null) { 77 Iterator it = cPool.iterator(); 78 while (it.hasNext()) { 79 ((Deflater)it.next()).end(); 80 } 81 cPool = null; 82 } 83 if (cNoWrapPool != null) { 84 Iterator it = cNoWrapPool.iterator(); 85 while (it.hasNext()) { 86 ((Deflater)it.next()).end(); 87 } 88 cNoWrapPool = null; 89 } 90 } 91 92 public static synchronized Deflater get(int level, boolean nowrap) { 93 List pool; 94 95 if (nowrap) { 96 if ((pool = cNoWrapPool) == null) { 97 return new Deflater(level, true); 98 } 99 } 100 else { 101 if ((pool = cPool) == null) { 102 return new Deflater(level, false); 103 } 104 } 105 106 if (pool.isEmpty()) { 107 return new Deflater(level, nowrap); 108 } 109 110 Deflater d = (Deflater)pool.remove(pool.size() - 1); 111 d.setLevel(level); 112 d.setStrategy(Deflater.DEFAULT_STRATEGY); 113 return d; 114 } 115 116 public static Deflater get(int level) { 117 return get(level, false); 118 } 119 120 public static Deflater get() { 121 return get(Deflater.DEFAULT_COMPRESSION, false); 122 } 123 124 public static synchronized void put(Deflater d) { 125 d.reset(); 126 List pool; 127 128 if (d.isNoWrap()) { 129 if ((pool = cNoWrapPool) == null) { 130 pool = cNoWrapPool = new ArrayList(LIMIT); 131 } 132 } 133 else { 134 if ((pool = cPool) == null) { 135 pool = cPool = new ArrayList(LIMIT); 136 } 137 } 138 139 if (pool.size() < LIMIT) { 140 pool.add(d); 141 } 142 else { 143 d.end(); 144 } 145 } 146 } 147 | Popular Tags |