vString reads(long n) {
public vString reads(long n) {
vString reads(long n) {    vByteBuffer b = new vByteBuffer((int) n);    if (instream == null) {	iRuntime.error(212, this);	// not open for reading    }    try {	// suppress initial LF if previous call was to read()	// and it consumed CR but not yet LF	if (lastCharRead == '\r') {	    char c = this.rchar();	    if (c != '\n') {		b.append(c);	    }	}	// now read remaining bytes	while (b.length() < n) {	    b.append(this.rchar());	}    } catch (EOFException e) {	if (b.length() == 0)	    return null; /*FAIL*/    } catch (IOException e) {	iRuntime.error(214, this);	// I/O error	return null;    }    lastCharRead = '\0';		// reset in case read() follows    return b.mkString();		// return data as a string}