code: @Override
  	public int read() throws IOException {
  		int ch = super.read();
  		if (!escaped && charsToEscape.contains((char) ch)) {
  			// special case for non-displayable characters
  			switch (ch) {
  			case '\n':
  				ch = 'n';
  				break;
  			case '\r':
  				ch = 'r';
  				break;
  			case '\t':
  				ch = 't';
  				break;
  			}
  			super.unread(ch);
  			escaped = true;
  			ch = '\\';
  		} else {
  			escaped = false;
  		}
  		return ch;
  	}
docs: Reads a single character.
  
  @return The character read, or -1 if the end of the stream has been
  reached
  @throws IOException
  if an I/O error occurs