@@ -167,39 +167,57 @@ public int readUntil(char[] dest, int off, int maxLen, char delim1, char delim2)
167167
168168 int totalRead = 0 ;
169169
170+ // Copy member variables to locals for faster loop access (avoids repeated field loads)
171+ final char [] localPushbackBuffer = pushbackBuffer ;
172+ final int localPushbackBufferSize = pushbackBufferSize ;
173+ int localPushbackPosition = pushbackPosition ;
174+ final char [] localBuf = buf ;
175+ int localPosition = position ;
176+ int localLimit = limit ;
177+
170178 // First, drain any pushback buffer
171- while (pushbackPosition < pushbackBufferSize && totalRead < maxLen ) {
172- char c = pushbackBuffer [ pushbackPosition ];
179+ while (localPushbackPosition < localPushbackBufferSize && totalRead < maxLen ) {
180+ char c = localPushbackBuffer [ localPushbackPosition ];
173181 if (c == delim1 || c == delim2 ) {
174182 // Found delimiter in pushback - don't consume it
183+ pushbackPosition = localPushbackPosition ; // Write back before return
175184 return totalRead > 0 ? totalRead : 0 ;
176185 }
177186 dest [off ++] = c ;
178- pushbackPosition ++;
187+ localPushbackPosition ++;
179188 totalRead ++;
180189 }
190+ pushbackPosition = localPushbackPosition ; // Write back after pushback loop
181191
182192 // Now read from main buffer
183193 while (totalRead < maxLen ) {
194+ // Write back position before fill() since fill() may modify position/limit
195+ position = localPosition ;
184196 fill ();
185- if (limit == -1 ) {
197+ // Re-read after fill() since it may have changed position and limit
198+ localPosition = position ;
199+ localLimit = limit ;
200+
201+ if (localLimit == -1 ) {
186202 // EOF reached
187203 return totalRead > 0 ? totalRead : -1 ;
188204 }
189205
190206 // Scan current buffer for delimiters
191- while (position < limit && totalRead < maxLen ) {
192- char c = buf [ position ];
207+ while (localPosition < localLimit && totalRead < maxLen ) {
208+ char c = localBuf [ localPosition ];
193209 if (c == delim1 || c == delim2 ) {
194210 // Found delimiter - don't consume it
211+ position = localPosition ; // Write back before return
195212 return totalRead ;
196213 }
197214 dest [off ++] = c ;
198- position ++;
215+ localPosition ++;
199216 totalRead ++;
200217 }
201218 }
202219
220+ position = localPosition ; // Write back after main loop
203221 return totalRead ;
204222 }
205223
0 commit comments