So in '1ET', I have to consume the '1' and not the 'ET'? 

That's correct. Without this patch, 'E' will stay in this.currentChar, so it will not be a problem. With nextChar() you are trying to use, the currentChar will be changed and replaced by next one, loosing the 'E'.

Stream already have ability to preview a byte, so creating a peekChar() shall not be an issue.