@@ -288,24 +288,29 @@ public class FourBitsEncoder extends BioSeqEncoder {
288
288
0x04 , // 0xfe
289
289
0x04 // 0xff
290
290
};
291
-
291
+
292
292
@ Override
293
293
public byte [] decode (byte [] data , int size ) {
294
+ return decode (data ,0 ,size );
295
+ }
296
+
297
+ @ Override
298
+ public byte [] decode (byte [] data , int start ,int size ) {
294
299
int newsize = (size << 1 );
295
300
// test for padding
296
301
if ((data [size -1 ] & 0x0f ) == 0x0f ) {
297
302
newsize --;
298
303
}
299
304
byte [] r = new byte [newsize ];
300
305
301
- for (int i =0 ;i <size ;i ++) {
306
+ for (int i =start , j = 0 ;i <size ;i ++, j += 2 ) {
302
307
byte fst = (byte ) ((data [i ] >> 4 ) & 0x07 );
303
308
byte snd = (byte ) (data [i ] & 0x07 );
304
- System .out .printf ("D: %d fst = %x %d snd = %x\n " ,i <<1 ,fst ,(i << 1 )+1 ,snd );
309
+ System .out .printf ("D: %d fst = %x %d snd = %x\n " ,i <<1 ,fst ,(j )+1 ,snd );
305
310
306
- r [i << 1 ] = (byte ) ((data [i ] & 0x80 ) == 0x80 ? colors [fst ] : bases [fst ]);
311
+ r [j ] = (byte ) ((data [i ] & 0x80 ) == 0x80 ? colors [fst ] : bases [fst ]);
307
312
if (snd == 7 ) break ;
308
- r [( i << 1 ) + 1 ] = (byte ) ((data [i ] & 0x08 ) == 0x08 ? colors [snd ] : bases [snd ]);
313
+ r [j + 1 ] = (byte ) ((data [i ] & 0x08 ) == 0x08 ? colors [snd ] : bases [snd ]);
309
314
}
310
315
return r ;
311
316
}
@@ -316,21 +321,26 @@ public void printBytes(byte[] x,int size) {
316
321
}
317
322
System .out .print ("\n " );
318
323
}
319
-
324
+
320
325
@ Override
321
326
public byte [] encode (byte [] data , int size ) {
327
+ return encode (data ,0 ,size );
328
+ }
329
+
330
+ @ Override
331
+ public byte [] encode (byte [] data , int start ,int size ) {
322
332
int newsize = ((size +1 ) >> 1 );
323
333
byte [] r = new byte [newsize ];
324
334
325
- for (int i =0 ;i <size ;i +=2 ) {
326
- r [i >> 1 ] = (byte ) (encodingVector [data [i ]] <<4 );
335
+ for (int i =start , j = 0 ;i <size ;i +=2 , j ++ ) {
336
+ r [j ] = (byte ) (encodingVector [data [i ]] <<4 );
327
337
328
- if (i +1 < size ) {
329
- r [i >> 1 ] += (byte ) (encodingVector [data [i +1 ]]);
330
- System .out .printf ("E: %d %c %c r=%x\n " ,i ,data [i ],data [i +1 ],r [i >> 1 ]);
338
+ if (i - start +1 < size ) {
339
+ r [j ] += (byte ) (encodingVector [data [i +1 ]]);
340
+ System .out .printf ("E: %d %c %c r=%x\n " ,i ,data [i ],data [i +1 ],r [j ]);
331
341
} else {
332
- r [i >> 1 ] += 0x0f ;
333
- System .out .printf ("E: %d %c pad r=%x\n " ,i ,data [i ],r [i >> 1 ]);
342
+ r [j ] += 0x0f ;
343
+ System .out .printf ("E: %d %c pad r=%x\n " ,i ,data [i ],r [j ]);
334
344
}
335
345
}
336
346
return r ;
0 commit comments