summaryrefslogtreecommitdiff
path: root/main/client
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-05-22 19:34:21 -0700
committerLi Haoyi <haoyi.sg@gmail.com>2018-05-22 19:50:18 -0700
commit6e60ce3d921a9b5e4ced628e2014b707ce2bbbee (patch)
tree05739c9d3c528ac9d0b4950eb25f43204ceaebde /main/client
parent7358b3c9ecd38cb0d8e268dc7b83156b813a7065 (diff)
downloadmill-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.java36
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()".