protected void decodeAtom(PushbackInputStream inStream,OutputStream outStream,int l) throws IOException {
  int i, c1, c2, c3, c4;
  int a, b, c;
  StringBuffer x=new StringBuffer();
  for (i=0; i < 4; i++) {
    c1=inStream.read();
    if (c1 == -1) {
      throw new CEStreamExhausted();
    }
    x.append((char)c1);
    decoderBuffer[i]=(byte)((c1 - ' ') & 0x3f);
  }
  a=((decoderBuffer[0] << 2) & 0xfc) | ((decoderBuffer[1] >>> 4) & 3);
  b=((decoderBuffer[1] << 4) & 0xf0) | ((decoderBuffer[2] >>> 2) & 0xf);
  c=((decoderBuffer[2] << 6) & 0xc0) | (decoderBuffer[3] & 0x3f);
  outStream.write((byte)(a & 0xff));
  if (l > 1) {
    outStream.write((byte)(b & 0xff));
  }
  if (l > 2) {
    outStream.write((byte)(c & 0xff));
  }
}

protected void decodeAtom ( PushbackInputStream inStream , OutputStream outStream , int l ) throws IOException { int i , c1 , c2 , c3 , c4 ; int a , b , c ; StringBuffer x = new StringBuffer ( ) ; for ( i = 0 ; i < 4 ; i ++ ) { c1 = inStream . read ( ) ; if ( c1 == - 1 ) { throw new CEStreamExhausted ( ) ; } x . append ( ( char ) c1 ) ; decoderBuffer [ i ] = ( byte ) ( ( c1 - ' ' ) & 0x3f ) ; } a = ( ( decoderBuffer [ 0 ] << 2 ) & 0xfc ) | ( ( decoderBuffer [ 1 ] > > > 4 ) & 3 ) ; b = ( ( decoderBuffer [ 1 ] << 4 ) & 0xf0 ) | ( ( decoderBuffer [ 2 ] > > > 2 ) & 0xf ) ; c = ( ( decoderBuffer [ 2 ] << 6 ) & 0xc0 ) | ( decoderBuffer [ 3 ] & 0x3f ) ; outStream . write ( ( byte ) ( a & 0xff ) ) ; if ( l > 1 ) { outStream . write ( ( byte ) ( b & 0xff ) ) ; } if ( l > 2 ) { outStream . write ( ( byte ) ( c & 0xff ) ) ; } }
decode a uu atom . note that if l is less than 3 we don ' t write the extra bits , however the encoder always encodes 4 character groups even when they are not needed .
