def readCharacter(self): """ :rtype int """ if (not self.pushBackChar.is_empty()): return self.pushBackChar.pop() try: c = NonBlockingReader.READ_EXPIRED; s = 0; while (c == NonBlockingReader.READ_EXPIRED): c = self.reader.read() if (c >= 0 and Character.isHighSurrogate(c)): s = c c = NonBlockingReader.READ_EXPIRED return Character.toCodePoint(s, c) if s != 0 else c except: # TODO: Exception pass