code: public int decodeDigits(ByteArrayInputStream bis) throws ParameterException {
          if (bis.available() == 0) {
              throw new ParameterException("No more data to read.");
          }
          // FIXME: we could spare time by passing length arg - or getting it from
          // bis??
          int count = 0;
          address = "";
          int b = 0;
          while (bis.available() - 1 > 0) {
              b = (byte) bis.read();
  
              int d1 = b & 0x0f;
              int d2 = (b & 0xf0) >> 4;
  
              address += Integer.toHexString(d1) + Integer.toHexString(d2);
  
          }
  
          b = bis.read() & 0xff;
          address += Integer.toHexString((b & 0x0f));
  
          if (oddFlag != 1) {
              address += Integer.toHexString((b & 0xf0) >> 4);
          }
          return count;
      }
docs: This method is used in constructor that takes byte[] or ByteArrayInputStream as parameter. Decodes digits part. Stores
  result in digits field, where digits[0] holds most significant digit. This is because
  
  @param bis
  @return - number of bytes reads throws IllegalArgumentException - thrown if read error is encountered.
  @throws ParameterException - thrown if read error is encountered.