@@ -69,9 +69,6 @@ public int compress(byte[] in_data, int in_len, byte[] out_data) {
69
69
for (int i = lStart ; i < lEnd ; i ++) {
70
70
lWindow [i ] = in_data [ip + i ];
71
71
}
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
-
75
72
int llStart = sEnd - 1 , rrStart = 0 , llEnd = 0 , rrEnd = (lp = lEnd );
76
73
int minMatched = 1 , minIndex = 0 ;
77
74
while (llStart >= 0 ) {
@@ -95,9 +92,17 @@ public int compress(byte[] in_data, int in_len, byte[] out_data) {
95
92
ip ++;
96
93
tuples .add (Arrays .asList (0 , 0 , (int )lWindow [0 ]));
97
94
}
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 ));
98
104
}
99
- // System.out.println(tuples);
100
- return doEncode (tuples , out_data );
105
+ return compressedLen ;
101
106
}
102
107
103
108
private int doEncode (List <List <Integer >> tuples , byte [] out_data ) {
@@ -111,12 +116,16 @@ private int doEncode(List<List<Integer>> tuples, byte[] out_data) {
111
116
bits .append (bits2 );
112
117
Bits bits3 = Bits .ofByte ((byte )tuple .get (2 ).intValue ());
113
118
bits .append (bits3 );
114
- // System.out.println("("+ bits1 + ", "+ bits2 + ", "+ bits3 + ")");
119
+ if (isDebug ) {
120
+ System .out .println (tuple + " encoded result: " + "(" + bits1 + ", " + bits2 + ", " + bits3 + ")" );
121
+ }
115
122
finalRes .append (bits );
116
123
}
117
124
byte [] fr = finalRes .toByteArray ();
118
125
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
+ }
120
129
return fr .length ;
121
130
}
122
131
@@ -145,9 +154,12 @@ public int decompress(byte[] in_data, int in_len, byte[] out_data) {
145
154
}
146
155
List <Bits > sortedEncodeSeq = allEncodeSeq .stream ().sorted (Comparator .comparingInt (Bits ::length )).collect (Collectors .toList ());
147
156
Bits bits = Bits .ofByte (in_data );
157
+ if (isDebug ) {
158
+ System .out .println ("before decode: bits=" + bits );
159
+ }
148
160
int ip = 0 ;
149
161
List <List <Integer >> tuples = new ArrayList <>();
150
- while (ip < bits .length ()) {
162
+ while (ip < bits .length () && ip + e1 <= bits . length () ) {
151
163
Bits b1 = bits .subBits (ip , ip + e1 );
152
164
ip = ip + e1 ;
153
165
int offset = encoder .encodeToBinary (b1 );
@@ -168,7 +180,9 @@ public int decompress(byte[] in_data, int in_len, byte[] out_data) {
168
180
tuples .add (Arrays .asList (offset , length , symbol ));
169
181
ip += 8 ;
170
182
}
171
- // System.out.println(tuples);
183
+ if (isDebug ) {
184
+ System .out .println ("decode tuples=" + tuples );
185
+ }
172
186
return doDecode (tuples , out_data );
173
187
}
174
188
@@ -181,7 +195,9 @@ private int doDecode(List<List<Integer>> tuples, byte[] out_data) {
181
195
seq .append (sb );
182
196
} else {
183
197
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 );
185
201
}
186
202
}
187
203
int len = seq .byteLength ();
@@ -190,4 +206,12 @@ private int doDecode(List<List<Integer>> tuples, byte[] out_data) {
190
206
}
191
207
return len ;
192
208
}
209
+
210
+
211
+ private boolean isDebug = false ;
212
+
213
+ @ Override
214
+ public void setDebug (boolean isDebug ) {
215
+ this .isDebug = isDebug ;
216
+ }
193
217
}
0 commit comments