code: private void readStringChars2(CharArr arr, int middle) throws IOException {
      if (stringTerm == 0) {
        readStringBare(arr);
        return;
      }
  
      char terminator = (char) stringTerm;
  
      for (;;) {
        if (middle>=end) {
          arr.write(buf,start,middle-start);
          start=middle;
          getMore();
          middle=start;
        }
        int ch = buf[middle++];
        if (ch == terminator) {
          int len = middle-start-1;        
          if (len>0) arr.write(buf,start,len);
          start=middle;
          return;
        } else if (ch=='\\') {
          int len = middle-start-1;
          if (len>0) arr.write(buf,start,len);
          start=middle;
          arr.write(readEscapedChar());
          middle=start;
        }
      }
    }
docs: this should be faster for strings with fewer escapes, but probably slower for many escapes.