docs: public String readField() throws IOException {
  		int c;
  		final int UNQUOTED = 0;
  		final int QUOTED = 1;
  		final int QUOTEDPLUS = 2;
  		int state = UNQUOTED;
  
  		if (this.eof) {
  			throw new EOFException();
  		}
  
  		this.buffer.setLength(0);
  		while ((c = this.read()) >= 0) {
  			if (state == QUOTEDPLUS) {
  				switch (c) {
  				case '"':
  					this.buffer.append('"');
  					state = QUOTED;
  					continue;
  				default:
  					state = UNQUOTED;
  					break;
  				}
  			}
  			if (state == QUOTED) {
  				switch (c) {
  				default:
  					this.buffer.append((char) c);
  					continue;
  				case '"':
  					state = QUOTEDPLUS;
  					continue;
  				}
  			}
  
  			// (state == UNQUOTED)
  			switch (c) {
  			case '"':
  				state = QUOTED;
  				continue;
  			case '\r':
  				continue;
  			case '\n':
  			case ',':
  				this.moreFieldsOnLine = (c != '\n');
  				return this.buffer.toString();
  			default:
  				this.buffer.append((char) c);
  				continue;
  			}
  
  		}
  		this.eof = true;
  		this.moreFieldsOnLine = false;
  		return this.buffer.toString();
  	}