code: public int decodeDigits(ByteArrayInputStream bis) throws ParameterException {
          if(skipDigits()){
              return 0;
          }
          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;
          try {
              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 != _FLAG_ODD) {
                  address += Integer.toHexString((b & 0xf0) >> 4);
              }
              this.setAddress(address);
          } catch (Exception e) {
              throw new ParameterException(e);
          }
          return count;
      }
docs: This method is used in constructor that takes byte[] or ByteArrayInputStream as parameter. Decodes digits part.
  
  @param bis
  @return - number of bytes reads
  @throws IllegalArgumentException - thrown if read error is encountered.