7
7
import com .beust .jcommander .Parameter ;
8
8
import org .apache .commons .lang3 .SystemUtils ;
9
9
10
+ import java .io .BufferedReader ;
10
11
import java .io .IOException ;
11
12
import java .io .InputStreamReader ;
12
13
import java .io .OutputStream ;
@@ -116,8 +117,8 @@ protected abstract static class AbstractFactoryWithForkServer extends AbstractFa
116
117
117
118
private Process forkServer ;
118
119
private OutputStream forkServerStdin ;
119
- private InputStreamReader forkServerStdout ;
120
- private InputStreamReader forkServerStderr ;
120
+ private BufferedReader forkServerStdout ;
121
+ private BufferedReader forkServerStderr ;
121
122
122
123
/**
123
124
* Misc files to be cleaned up just before JVM termination.
@@ -156,33 +157,6 @@ protected Charset getCharset() {
156
157
return Charset .defaultCharset ();
157
158
}
158
159
159
- /**
160
- * Reads a line of text until '\n', <b>byte-by-byte</b>.
161
- *
162
- * This is used to avoid deadlocks: more output may be read from the forkserver,
163
- * but only after writing request to <b>stdin</b>. But first we should know that
164
- * the forkserver is ready -- by reading its output streams.
165
- * @param reader A stream to read from
166
- * @param lineBuffer A scratch buffer
167
- * @return A single line of output until '\n' (excluding) or EOF (if non-empty)
168
- * or <code>null</code>, if got EOF as the very first character
169
- * @throws IOException
170
- */
171
- private String readString (InputStreamReader reader , char [] lineBuffer ) throws IOException {
172
- int lineLength ;
173
- for (lineLength = 0 ; lineLength < lineBuffer .length ; ++lineLength ) {
174
- int ch = reader .read ();
175
- if (ch == -1 && lineLength == 0 ) {
176
- return null ;
177
- }
178
- if (ch == -1 || ch == '\n' ) {
179
- break ;
180
- }
181
- lineBuffer [lineLength ] = (char ) ch ;
182
- }
183
- return new String (lineBuffer , 0 , lineLength );
184
- }
185
-
186
160
/**
187
161
* Reads all lines of output until the {@link #FORKSERVER_TO_SCM_MARKER}.
188
162
*
@@ -193,10 +167,9 @@ private String readString(InputStreamReader reader, char[] lineBuffer) throws IO
193
167
* or <code>null</code> on unexpected EOF
194
168
* @throws IOException
195
169
*/
196
- private String readUntilMarker (InputStreamReader reader , List <String > stdoutContents ) throws IOException {
197
- char [] lineBuffer = new char [MAX_LINE_LENGTH ];
170
+ private String readUntilMarker (BufferedReader reader , List <String > stdoutContents ) throws IOException {
198
171
while (true ) {
199
- String line = readString ( reader , lineBuffer );
172
+ String line = reader . readLine ( );
200
173
if (line == null ) {
201
174
return null ;
202
175
}
@@ -274,8 +247,8 @@ public void initialize(InvariantOperations ops) throws IOException {
274
247
preloadedObject = compilePreloadedObject ();
275
248
forkServer = createProcessBuilder ().start ();
276
249
forkServerStdin = forkServer .getOutputStream ();
277
- forkServerStdout = new InputStreamReader (forkServer .getInputStream (), getCharset ());
278
- forkServerStderr = new InputStreamReader (forkServer .getErrorStream (), getCharset ());
250
+ forkServerStdout = new BufferedReader ( new InputStreamReader (forkServer .getInputStream (), getCharset () ));
251
+ forkServerStderr = new BufferedReader ( new InputStreamReader (forkServer .getErrorStream (), getCharset () ));
279
252
280
253
// Read startup messages
281
254
List <String > stdoutContents = new ArrayList <>();
0 commit comments