Optimization of multiRead

Change-Id: If50403d13a4ec238a30d0676e42701c8d333a2db
diff --git a/src/main/java/edu/stanford/ramcloud/JRamCloud.java b/src/main/java/edu/stanford/ramcloud/JRamCloud.java
index fef2b12..dfb4b6a 100644
--- a/src/main/java/edu/stanford/ramcloud/JRamCloud.java
+++ b/src/main/java/edu/stanford/ramcloud/JRamCloud.java
@@ -14,6 +14,9 @@
  */
 
 package edu.stanford.ramcloud;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.lang.Integer;
 
 /*
  * This class provides Java bindings for RAMCloud. Right now it is a rather
@@ -285,7 +288,7 @@
     public native long getTableId(String name);
     public native Object read(long tableId, byte[] key);
     public native Object read(long tableId, byte[] key, RejectRules rules);
-    public native Object[] multiRead(multiReadObject[] mread);
+    public native Object[] multiRead(long[] tableId, byte[] keydata[], short[] keyDataSize, int requestNum);
     public native long remove(long tableId, byte[] key);
     public native long remove(long tableId, byte[] key, RejectRules rules);
     public native long write(long tableId, byte[] key, byte[] value);
@@ -388,16 +391,22 @@
         ramcloud.write(tableId6, "object3-1", "value:3-1");
         ramcloud.write(tableId6, "object3-2", "value:3-2");
 
-        multiReadObject mread[] = new multiReadObject[2];
-        //for (int k = 0; k < 2000; k++) {
-        mread[0] = new multiReadObject(tableId4, "object1-1".getBytes());
-        mread[1] = new multiReadObject(tableId5, "object2-1".getBytes());
-        JRamCloud.Object out[] = ramcloud.multiRead(mread);
+	long tableIdList[] = new long[2];
+        byte[] keydata[] = new byte[2][];
+        short keydataSize[] = new short[2];
+        tableIdList[0] = tableId4;
+        keydata[0] = "object1-1".getBytes();
+        keydataSize[0] = (short) keydata[0].length;
+        tableIdList[1] = tableId5;
+        keydata[1] = "object2-1".getBytes();
+	keydataSize[1] = (short) keydata[1].length;
+
+        JRamCloud.Object out[] = ramcloud.multiRead(tableIdList, keydata, keydataSize, 2);
         for (int i = 0 ; i < 2 ; i++){
             System.out.println("multi read object: key = [" + out[i].getKey() + "], value = ["
                     + out[i].getValue() + "]");
-        //}
         }
+
         MultiWriteObject mwrite[] = new MultiWriteObject[2];
         for (int i = 0; i < 1000; i++) {
             String key1 = "key1" + new Integer(i).toString();
@@ -415,13 +424,19 @@
         for (int i = 0; i < 1000; i++) {
             String key1 = "key1" + new Integer(i).toString();
             String key2 = "key2" + new Integer(i).toString();
-            mread[0] = new multiReadObject(tableId4, key1.getBytes());
-            mread[1] = new multiReadObject(tableId5, key2.getBytes());
-            out = ramcloud.multiRead(mread);
+            tableIdList[0] = tableId4;
+            keydata[0] = key1.getBytes();
+            keydataSize[0] = (short) keydata[0].length;
+            tableIdList[1] = tableId5;
+            keydata[1] = key2.getBytes();
+            keydataSize[1] = (short) keydata[1].length;
+
+            out = ramcloud.multiRead(tableIdList, keydata, keydataSize, 2);
             for (int j = 0; j < 2; j++) {
                 System.out.println("multi read object: key = [" + out[j].getKey() + "], value = [" + out[j].getValue() + "]");
             }
         }
+
         ramcloud.dropTable("table4");
         ramcloud.dropTable("table5");
         ramcloud.dropTable("table6");