--- a/jdk/test/java/rmi/testlibrary/StreamPipe.java Thu Dec 20 20:40:04 2012 +0000
+++ b/jdk/test/java/rmi/testlibrary/StreamPipe.java Thu Dec 20 20:11:45 2012 -0800
@@ -21,11 +21,10 @@
* questions.
*/
-/**
- *
- */
-
-import java.io.*;
+import java.io.InputStream;
+import java.io.InterruptedIOException;
+import java.io.IOException;
+import java.io.OutputStream;
/**
* Pipe output of one stream into input of another.
@@ -34,84 +33,46 @@
private InputStream in;
private OutputStream out;
- private String preamble;
- private JavaVM javaVM;
- private static Object lock = new Object();
+
+ private static Object countLock = new Object();
private static int count = 0;
-
- /* StreamPipe constructor : should only be called by plugTogether() method !!
- * If passed vm is not null :
- * - This is StreamPipe usage when streams to pipe come from a given
- * vm (JavaVM) process (the vm process must be started with a prefixed
- * "-showversion" option to be able to determine as soon as possible when
- * the vm process is started through the redirection of the streams).
- * There must be a close connection between the StreamPipe instance and
- * the JavaVM object on which a start() call has been done.
- * run() method will flag distant JavaVM as started.
- * If passed vm is null :
- * - We don't have control on the process which we want to redirect the passed
- * streams.
- * run() method will ignore distant process.
+ /**
+ * StreamPipe constructor : should only be called by plugTogether() method.
*/
- private StreamPipe(JavaVM vm, InputStream in, OutputStream out, String name) {
+ private StreamPipe(InputStream in, OutputStream out, String name) {
super(name);
this.in = in;
this.out = out;
- this.preamble = "# ";
- this.javaVM = vm;
}
- // Install redirection of passed InputStream and OutputStream from passed JavaVM
- // to this vm standard output and input streams.
- public static void plugTogether(JavaVM vm, InputStream in, OutputStream out) {
- String name = null;
+ /**
+ * Creates a StreamPipe thread that copies in to out and returns
+ * the created instance.
+ */
+ public static StreamPipe plugTogether(InputStream in, OutputStream out) {
+ String name;
- synchronized (lock) {
- name = "TestLibrary: StreamPipe-" + (count ++ );
+ synchronized (countLock) {
+ name = "java.rmi.testlibrary.StreamPipe-" + (count++);
}
- Thread pipe = new StreamPipe(vm, in, out, name);
+ StreamPipe pipe = new StreamPipe(in, out, name);
pipe.setDaemon(true);
pipe.start();
- }
-
- /* Redirects the InputStream and OutputStream passed by caller to this
- * vm standard output and input streams.
- * (we just have to use fully parametered plugTogether() call with a null
- * JavaVM input to do this).
- */
- public static void plugTogether(InputStream in, OutputStream out) {
- plugTogether(null, in, out);
+ return pipe;
}
// Starts redirection of streams.
public void run() {
- BufferedReader r = new BufferedReader(new InputStreamReader(in), 1);
- BufferedWriter w = new BufferedWriter(new OutputStreamWriter(out));
- byte[] buf = new byte[256];
-
try {
- String line;
+ byte[] buf = new byte[1024];
- /* This is to check that the distant vm has started,
- * if such a vm has been provided at construction :
- * - As soon as we can read something from r BufferedReader,
- * that means the distant vm is already started.
- * Thus we signal associated JavaVM object that it is now started.
- */
- if (((line = r.readLine()) != null) &&
- (javaVM != null)) {
- javaVM.setStarted();
- }
-
- // Redirects r on w.
- while (line != null) {
- w.write(preamble);
- w.write(line);
- w.newLine();
- w.flush();
- line = r.readLine();
+ while (true) {
+ int nr = in.read(buf);
+ if (nr == -1)
+ break;
+ out.write(buf, 0, nr);
}
} catch (InterruptedIOException iioe) {
// Thread interrupted during IO operation. Terminate StreamPipe.
@@ -121,5 +82,4 @@
e.printStackTrace();
}
}
-
}