diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-05-22 19:34:21 -0700 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-05-22 19:50:18 -0700 |
commit | 6e60ce3d921a9b5e4ced628e2014b707ce2bbbee (patch) | |
tree | 05739c9d3c528ac9d0b4950eb25f43204ceaebde /main/client | |
parent | 7358b3c9ecd38cb0d8e268dc7b83156b813a7065 (diff) | |
download | mill-6e60ce3d921a9b5e4ced628e2014b707ce2bbbee.tar.gz mill-6e60ce3d921a9b5e4ced628e2014b707ce2bbbee.tar.bz2 mill-6e60ce3d921a9b5e4ced628e2014b707ce2bbbee.zip |
optimize output streaming to allow batch writes
Diffstat (limited to 'main/client')
-rw-r--r-- | main/client/src/mill/main/client/MillClientMain.java | 36 |
1 files changed, 12 insertions, 24 deletions
diff --git a/main/client/src/mill/main/client/MillClientMain.java b/main/client/src/mill/main/client/MillClientMain.java index e3d3ec6e..45bd05ef 100644 --- a/main/client/src/mill/main/client/MillClientMain.java +++ b/main/client/src/mill/main/client/MillClientMain.java @@ -162,36 +162,24 @@ class ClientOutputPumper implements Runnable{ public void run() { byte[] buffer = new byte[1024]; - int state = 0; boolean running = true; boolean first = true; while (running) { try { - int n = src.read(buffer); - first = false; - if (n == -1) running = false; - else { - int i = 0; - while (i < n) { - switch (state) { - case 0: - state = buffer[i] + 1; - break; - case 1: - dest1.write(buffer[i]); - state = 0; - break; - case 2: - dest2.write(buffer[i]); - state = 0; - break; - } - - i += 1; + int quantity0 = (byte)src.read(); + int quantity = Math.abs(quantity0); + int offset = 0; + while(offset < quantity){ + int delta = src.read(buffer, offset, quantity - offset); + if (delta == -1) { + running = false; + break; + }else{ + offset += delta; } - dest1.flush(); - dest2.flush(); } + if (quantity0 < 0) dest1.write(buffer, 0, quantity); + else dest2.write(buffer, 0, quantity); } catch (IOException e) { // Win32NamedPipeSocket input stream somehow doesn't return -1, // instead it throws an IOException whose message contains "ReadFile()". |