@@ -69,9 +69,6 @@ public int compress(byte[] in_data, int in_len, byte[] out_data) {
6969 for (int i = lStart ; i < lEnd ; i ++) {
7070 lWindow [i ] = in_data [ip + i ];
7171 }
72- //System.out.println("txt=" + new String() + new String(in_data) + ", sBuf="
73- // + new StringBuilder(new String(sBuf)).reverse().toString() + ", lWindow=" + new String(lWindow));
74-
7572 int llStart = sEnd - 1 , rrStart = 0 , llEnd = 0 , rrEnd = (lp = lEnd );
7673 int minMatched = 1 , minIndex = 0 ;
7774 while (llStart >= 0 ) {
@@ -95,9 +92,17 @@ public int compress(byte[] in_data, int in_len, byte[] out_data) {
9592 ip ++;
9693 tuples .add (Arrays .asList (0 , 0 , (int )lWindow [0 ]));
9794 }
95+ if (isDebug ) {
96+ System .out .println ("Txt=" + new String () + new String (in_data ) + ", SearchBuffer="
97+ + new StringBuilder (new String (sBuf )).reverse ().toString () + ", LookaheadWindow=" + new String (lWindow )
98+ + " | " + tuples .get (tuples .size ()-1 )/* + " | " + (char)(tuples.get(tuples.size()-1).get(2).intValue())*/ );
99+ }
100+ }
101+ int compressedLen = doEncode (tuples , out_data );
102+ if (isDebug ) {
103+ System .out .println ("after encode: compressed rate=" + (compressedLen * 1.0 / in_len ));
98104 }
99- // System.out.println(tuples);
100- return doEncode (tuples , out_data );
105+ return compressedLen ;
101106 }
102107
103108 private int doEncode (List <List <Integer >> tuples , byte [] out_data ) {
@@ -111,12 +116,16 @@ private int doEncode(List<List<Integer>> tuples, byte[] out_data) {
111116 bits .append (bits2 );
112117 Bits bits3 = Bits .ofByte ((byte )tuple .get (2 ).intValue ());
113118 bits .append (bits3 );
114- // System.out.println("("+ bits1 + ", "+ bits2 + ", "+ bits3 + ")");
119+ if (isDebug ) {
120+ System .out .println (tuple + " encoded result: " + "(" + bits1 + ", " + bits2 + ", " + bits3 + ")" );
121+ }
115122 finalRes .append (bits );
116123 }
117124 byte [] fr = finalRes .toByteArray ();
118125 System .arraycopy (fr , 0 , out_data , 0 , fr .length );
119- // System.out.println("bits: " + finalRes);
126+ if (isDebug ) {
127+ System .out .println ("after encode: bits=" + finalRes );
128+ }
120129 return fr .length ;
121130 }
122131
@@ -145,9 +154,12 @@ public int decompress(byte[] in_data, int in_len, byte[] out_data) {
145154 }
146155 List <Bits > sortedEncodeSeq = allEncodeSeq .stream ().sorted (Comparator .comparingInt (Bits ::length )).collect (Collectors .toList ());
147156 Bits bits = Bits .ofByte (in_data );
157+ if (isDebug ) {
158+ System .out .println ("before decode: bits=" + bits );
159+ }
148160 int ip = 0 ;
149161 List <List <Integer >> tuples = new ArrayList <>();
150- while (ip < bits .length ()) {
162+ while (ip < bits .length () && ip + e1 <= bits . length () ) {
151163 Bits b1 = bits .subBits (ip , ip + e1 );
152164 ip = ip + e1 ;
153165 int offset = encoder .encodeToBinary (b1 );
@@ -168,7 +180,9 @@ public int decompress(byte[] in_data, int in_len, byte[] out_data) {
168180 tuples .add (Arrays .asList (offset , length , symbol ));
169181 ip += 8 ;
170182 }
171- // System.out.println(tuples);
183+ if (isDebug ) {
184+ System .out .println ("decode tuples=" + tuples );
185+ }
172186 return doDecode (tuples , out_data );
173187 }
174188
@@ -181,7 +195,9 @@ private int doDecode(List<List<Integer>> tuples, byte[] out_data) {
181195 seq .append (sb );
182196 } else {
183197 int start = seq .byteLength () < s ? seq .byteLength () - offset : s - offset ;
184- seq .append (seq .subBits (start * 8 , (start + length ) * 8 )).append (sb );
198+ int used = seq .byteLength () < s ? 0 : seq .byteLength () - s ;
199+ // System.out.println("start=" + start + ", used=" + used + ", length=" + length);
200+ seq .append (seq .subBits ((used + start ) * 8 , (used + start + length ) * 8 )).append (sb );
185201 }
186202 }
187203 int len = seq .byteLength ();
@@ -190,4 +206,12 @@ private int doDecode(List<List<Integer>> tuples, byte[] out_data) {
190206 }
191207 return len ;
192208 }
209+
210+
211+ private boolean isDebug = false ;
212+
213+ @ Override
214+ public void setDebug (boolean isDebug ) {
215+ this .isDebug = isDebug ;
216+ }
193217}
0 commit comments