improved Tight decoder performance.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4797 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/java/com/tigervnc/rfb/TightDecoder.java b/java/com/tigervnc/rfb/TightDecoder.java
index 8c2275f..7698627 100644
--- a/java/com/tigervnc/rfb/TightDecoder.java
+++ b/java/com/tigervnc/rfb/TightDecoder.java
@@ -181,8 +181,10 @@
         if (cutZeros) {
           input.readPixels(buf, r.area(), 3, !bigEndian);
         } else {
-          for (int ptr=0; ptr < dataSize; ptr++)
-            buf[ptr] = input.readU8();
+          byte[] netbuf = new byte[dataSize];
+          input.readBytes(netbuf, 0, dataSize);
+          for (int i = 0; i < dataSize; i++)
+            buf[i] = netbuf[i] & 0xff;
         }
       }
     } else {
@@ -191,27 +193,29 @@
       int bits;
       if (palSize <= 2) {
         // 2-color palette
-        for (y = 0; y < r.height(); y++) {
-          for (x = 0; x < r.width() / 8; x++) {
+        int height = r.height();
+        int width = r.width();
+        for (y = 0; y < height; y++) {
+          for (x = 0; x < width / 8; x++) {
             bits = input.readU8();
             for(b = 7; b >= 0; b--) {
               buf[ptr++] = palette[bits >> b & 1];
             }
           }
-          if (r.width() % 8 != 0) {
+          if (width % 8 != 0) {
             bits = input.readU8();
-            for (b = 7; b >= 8 - r.width() % 8; b--) {
+            for (b = 7; b >= 8 - width % 8; b--) {
               buf[ptr++] = palette[bits >> b & 1];
             }
           }
         }
       } else {
         // 256-color palette
-        for (y = 0; y < r.height(); y++) {
-          for (x = 0; x < r.width(); x++) {
-            buf[ptr++] = palette[input.readU8()];
-          }
-        }
+        int area = r.area();
+        byte[] netbuf = new byte[area];
+        input.readBytes(netbuf, 0, area); 
+        for (int i = 0; i < area; i++)
+          buf[ptr++] = palette[netbuf[i] & 0xff];
       }
     }