|
@@ -1,232 +1,632 @@
|
|
package communication;
|
|
package communication;
|
|
|
|
|
|
-import java.util.Arrays;
|
|
+import java.io.ByteArrayInputStream;
|
|
|
|
+import java.io.ByteArrayOutputStream;
|
|
|
|
+import java.io.DataInputStream;
|
|
|
|
+import java.io.DataOutputStream;
|
|
|
|
+import java.io.IOException;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
|
import com.oblivm.backend.gc.GCSignal;
|
|
import com.oblivm.backend.gc.GCSignal;
|
|
|
|
|
|
|
|
+import oram.Bucket;
|
|
import oram.Tuple;
|
|
import oram.Tuple;
|
|
-import util.Util;
|
|
|
|
|
|
|
|
public class ComUtil {
|
|
public class ComUtil {
|
|
- public static byte[] toByteArray(byte[][] in) {
|
|
+ public static byte[] serialize(byte[][] in) {
|
|
- int len1 = in.length;
|
|
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
- int len2 = in[0].length;
|
|
+ DataOutputStream dos = new DataOutputStream(baos);
|
|
- byte[] out = new byte[len1 * len2];
|
|
+ byte[] out = null;
|
|
- for (int i = 0; i < len1; i++)
|
|
+ try {
|
|
- System.arraycopy(in[i], 0, out, i * len2, len2);
|
|
+ dos.writeInt(in.length);
|
|
|
|
+ dos.writeInt(in[0].length);
|
|
|
|
+ for (int i = 0; i < in.length; i++)
|
|
|
|
+ dos.write(in[i]);
|
|
|
|
+ out = baos.toByteArray();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dos.close();
|
|
|
|
+ baos.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static byte[][] toDoubleByteArray(byte[] in, int len1) {
|
|
+ public static byte[][] toDoubleByteArray(byte[] in) {
|
|
- int len2 = in.length / len1;
|
|
+ ByteArrayInputStream bais = new ByteArrayInputStream(in);
|
|
- byte[][] out = new byte[len1][];
|
|
+ DataInputStream dis = new DataInputStream(bais);
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ byte[][] out = null;
|
|
- out[i] = Arrays.copyOfRange(in, i * len2, (i + 1) * len2);
|
|
+ try {
|
|
|
|
+ int len1 = dis.readInt();
|
|
|
|
+ int len2 = dis.readInt();
|
|
|
|
+ out = new byte[len1][len2];
|
|
|
|
+ for (int i = 0; i < len1; i++)
|
|
|
|
+ dis.read(out[i]);
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dis.close();
|
|
|
|
+ bais.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static byte[] toByteArray(byte[][][] in) {
|
|
+ public static byte[] serialize(byte[][][] in) {
|
|
- int len1 = in.length;
|
|
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
- int len2 = in[0].length;
|
|
+ DataOutputStream dos = new DataOutputStream(baos);
|
|
- int len3 = in[0][0].length;
|
|
+ byte[] out = null;
|
|
- byte[] out = new byte[len1 * len2 * len3];
|
|
+ try {
|
|
- for (int i = 0; i < len1; i++)
|
|
+ dos.writeInt(in.length);
|
|
- for (int j = 0; j < len2; j++)
|
|
+ dos.writeInt(in[0].length);
|
|
- System.arraycopy(in[i][j], 0, out, i * len2 * len3 + j * len3, len3);
|
|
+ dos.writeInt(in[0][0].length);
|
|
|
|
+ for (int i = 0; i < in.length; i++)
|
|
|
|
+ for (int j = 0; j < in[i].length; j++)
|
|
|
|
+ dos.write(in[i][j]);
|
|
|
|
+ out = baos.toByteArray();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dos.close();
|
|
|
|
+ baos.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static byte[][][] toTripleByteArray(byte[] in, int len1, int len2) {
|
|
+ public static byte[][][] toTripleByteArray(byte[] in) {
|
|
- int len3 = in.length / len1 / len2;
|
|
+ ByteArrayInputStream bais = new ByteArrayInputStream(in);
|
|
- byte[][][] out = new byte[len1][len2][];
|
|
+ DataInputStream dis = new DataInputStream(bais);
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ byte[][][] out = null;
|
|
- for (int j = 0; j < len2; j++) {
|
|
+ try {
|
|
- out[i][j] = Arrays.copyOfRange(in, i * len2 * len3 + j * len3, i * len2 * len3 + j * len3 + len3);
|
|
+ int len1 = dis.readInt();
|
|
|
|
+ int len2 = dis.readInt();
|
|
|
|
+ int len3 = dis.readInt();
|
|
|
|
+ out = new byte[len1][len2][len3];
|
|
|
|
+ for (int i = 0; i < len1; i++)
|
|
|
|
+ for (int j = 0; j < len2; j++)
|
|
|
|
+ dis.read(out[i][j]);
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dis.close();
|
|
|
|
+ bais.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static byte[] toByteArray(int[] in) {
|
|
+ public static byte[] serialize(int[] in) {
|
|
- byte[] out = new byte[in.length * 4];
|
|
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
- for (int i = 0; i < in.length; i++) {
|
|
+ DataOutputStream dos = new DataOutputStream(baos);
|
|
- byte[] n = Util.intToBytes(in[i]);
|
|
+ byte[] out = null;
|
|
- System.arraycopy(n, 0, out, i * 4, 4);
|
|
+ try {
|
|
|
|
+ dos.writeInt(in.length);
|
|
|
|
+ for (int i = 0; i < in.length; i++)
|
|
|
|
+ dos.writeInt(in[i]);
|
|
|
|
+ out = baos.toByteArray();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dos.close();
|
|
|
|
+ baos.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
public static int[] toIntArray(byte[] in) {
|
|
public static int[] toIntArray(byte[] in) {
|
|
- int len1 = in.length / 4;
|
|
+ ByteArrayInputStream bais = new ByteArrayInputStream(in);
|
|
- int[] out = new int[len1];
|
|
+ DataInputStream dis = new DataInputStream(bais);
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ int[] out = null;
|
|
- byte[] b = Arrays.copyOfRange(in, i * 4, (i + 1) * 4);
|
|
+ try {
|
|
- out[i] = Util.bytesToInt(b);
|
|
+ int len1 = dis.readInt();
|
|
|
|
+ out = new int[len1];
|
|
|
|
+ for (int i = 0; i < len1; i++)
|
|
|
|
+ out[i] = dis.readInt();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dis.close();
|
|
|
|
+ bais.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static byte[] toByteArray(int[][] in) {
|
|
+ public static byte[] serialize(int[][] in) {
|
|
- int len1 = in.length;
|
|
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
- int len2 = in[0].length;
|
|
+ DataOutputStream dos = new DataOutputStream(baos);
|
|
- byte[] out = new byte[len1 * len2 * 4];
|
|
+ byte[] out = null;
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ try {
|
|
- for (int j = 0; j < len2; j++) {
|
|
+ dos.writeInt(in.length);
|
|
- byte[] n = Util.intToBytes(in[i][j]);
|
|
+ dos.writeInt(in[0].length);
|
|
- System.arraycopy(n, 0, out, (i * len2 + j) * 4, 4);
|
|
+ for (int i = 0; i < in.length; i++)
|
|
|
|
+ for (int j = 0; j < in[i].length; j++)
|
|
|
|
+ dos.writeInt(in[i][j]);
|
|
|
|
+ out = baos.toByteArray();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dos.close();
|
|
|
|
+ baos.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static int[][] toDoubleIntArray(byte[] in, int len1) {
|
|
+ public static int[][] toDoubleIntArray(byte[] in) {
|
|
- int len2 = in.length / len1 / 4;
|
|
+ ByteArrayInputStream bais = new ByteArrayInputStream(in);
|
|
- int[][] out = new int[len1][len2];
|
|
+ DataInputStream dis = new DataInputStream(bais);
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ int[][] out = null;
|
|
- for (int j = 0; j < len2; j++) {
|
|
+ try {
|
|
- byte[] b = Arrays.copyOfRange(in, (i * len2 + j) * 4, (i * len2 + j + 1) * 4);
|
|
+ int len1 = dis.readInt();
|
|
- out[i][j] = Util.bytesToInt(b);
|
|
+ int len2 = dis.readInt();
|
|
|
|
+ out = new int[len1][len2];
|
|
|
|
+ for (int i = 0; i < len1; i++)
|
|
|
|
+ for (int j = 0; j < len2; j++)
|
|
|
|
+ out[i][j] = dis.readInt();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dis.close();
|
|
|
|
+ bais.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static byte[] toByteArray(Tuple[] in) {
|
|
+ public static byte[] serialize(Tuple in) {
|
|
- int len1 = in.length;
|
|
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
- int f = in[0].getF().length;
|
|
+ DataOutputStream dos = new DataOutputStream(baos);
|
|
- int n = in[0].getN().length;
|
|
+ byte[] out = null;
|
|
- int l = in[0].getL().length;
|
|
+ try {
|
|
- int a = in[0].getA().length;
|
|
+ dos.writeInt(in.getF().length);
|
|
- int len2 = f + n + l + a;
|
|
+ dos.writeInt(in.getN().length);
|
|
- byte[] out = new byte[len1 * len2];
|
|
+ dos.writeInt(in.getL().length);
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ dos.writeInt(in.getA().length);
|
|
- System.arraycopy(in[i].getF(), 0, out, i * len2, f);
|
|
+ dos.write(in.getF());
|
|
- System.arraycopy(in[i].getN(), 0, out, i * len2 + f, n);
|
|
+ dos.write(in.getN());
|
|
- System.arraycopy(in[i].getL(), 0, out, i * len2 + f + n, l);
|
|
+ dos.write(in.getL());
|
|
- System.arraycopy(in[i].getA(), 0, out, i * len2 + f + n + l, a);
|
|
+ dos.write(in.getA());
|
|
|
|
+ out = baos.toByteArray();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dos.close();
|
|
|
|
+ baos.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static Tuple[] toTupleArray(byte[] in, int len1, int f, int n, int l) {
|
|
+ public static Tuple toTuple(byte[] in) {
|
|
- int len2 = in.length / len1;
|
|
+ ByteArrayInputStream bais = new ByteArrayInputStream(in);
|
|
- Tuple[] out = new Tuple[len1];
|
|
+ DataInputStream dis = new DataInputStream(bais);
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ Tuple out = null;
|
|
- byte[] F = Arrays.copyOfRange(in, i * len2, i * len2 + f);
|
|
+ try {
|
|
- byte[] N = Arrays.copyOfRange(in, i * len2 + f, i * len2 + f + n);
|
|
+ int f = dis.readInt();
|
|
- byte[] L = Arrays.copyOfRange(in, i * len2 + f + n, i * len2 + f + n + l);
|
|
+ int n = dis.readInt();
|
|
- byte[] A = Arrays.copyOfRange(in, i * len2 + f + n + l, (i + 1) * len2);
|
|
+ int l = dis.readInt();
|
|
- out[i] = new Tuple(F, N, L, A);
|
|
+ int a = dis.readInt();
|
|
|
|
+ byte[] F = new byte[f];
|
|
|
|
+ byte[] N = new byte[n];
|
|
|
|
+ byte[] L = new byte[l];
|
|
|
|
+ byte[] A = new byte[a];
|
|
|
|
+ dis.read(F);
|
|
|
|
+ dis.read(N);
|
|
|
|
+ dis.read(L);
|
|
|
|
+ dis.read(A);
|
|
|
|
+ out = new Tuple(F, N, L, A);
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dis.close();
|
|
|
|
+ bais.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static byte[] toByteArray(GCSignal[] in) {
|
|
+ public static byte[] serialize(Tuple[] in) {
|
|
- byte[] out = new byte[in.length * GCSignal.len];
|
|
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
- for (int i = 0; i < in.length; i++) {
|
|
+ DataOutputStream dos = new DataOutputStream(baos);
|
|
- System.arraycopy(in[i].bytes, 0, out, i * GCSignal.len, GCSignal.len);
|
|
+ byte[] out = null;
|
|
|
|
+ try {
|
|
|
|
+ dos.writeInt(in.length);
|
|
|
|
+ dos.writeInt(in[0].getF().length);
|
|
|
|
+ dos.writeInt(in[0].getN().length);
|
|
|
|
+ dos.writeInt(in[0].getL().length);
|
|
|
|
+ dos.writeInt(in[0].getA().length);
|
|
|
|
+ for (int i = 0; i < in.length; i++) {
|
|
|
|
+ dos.write(in[i].getF());
|
|
|
|
+ dos.write(in[i].getN());
|
|
|
|
+ dos.write(in[i].getL());
|
|
|
|
+ dos.write(in[i].getA());
|
|
|
|
+ }
|
|
|
|
+ out = baos.toByteArray();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dos.close();
|
|
|
|
+ baos.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static GCSignal[] toGCSignalArray(byte[] in) {
|
|
+ public static Tuple[] toTupleArray(byte[] in) {
|
|
- int len1 = in.length / GCSignal.len;
|
|
+ ByteArrayInputStream bais = new ByteArrayInputStream(in);
|
|
- GCSignal[] out = new GCSignal[len1];
|
|
+ DataInputStream dis = new DataInputStream(bais);
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ Tuple[] out = null;
|
|
- byte[] b = Arrays.copyOfRange(in, i * GCSignal.len, (i + 1) * GCSignal.len);
|
|
+ try {
|
|
- out[i] = new GCSignal(b);
|
|
+ int len = dis.readInt();
|
|
|
|
+ int f = dis.readInt();
|
|
|
|
+ int n = dis.readInt();
|
|
|
|
+ int l = dis.readInt();
|
|
|
|
+ int a = dis.readInt();
|
|
|
|
+ out = new Tuple[len];
|
|
|
|
+ for (int i = 0; i < len; i++) {
|
|
|
|
+ byte[] F = new byte[f];
|
|
|
|
+ byte[] N = new byte[n];
|
|
|
|
+ byte[] L = new byte[l];
|
|
|
|
+ byte[] A = new byte[a];
|
|
|
|
+ dis.read(F);
|
|
|
|
+ dis.read(N);
|
|
|
|
+ dis.read(L);
|
|
|
|
+ dis.read(A);
|
|
|
|
+ out[i] = new Tuple(F, N, L, A);
|
|
|
|
+ }
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dis.close();
|
|
|
|
+ bais.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static byte[] toByteArray(GCSignal[][] in) {
|
|
+ public static byte[] serialize(GCSignal[] in) {
|
|
- int len1 = in.length;
|
|
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
- int len2 = in[0].length;
|
|
+ DataOutputStream dos = new DataOutputStream(baos);
|
|
- byte[] out = new byte[len1 * len2 * GCSignal.len];
|
|
+ byte[] out = null;
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ try {
|
|
- for (int j = 0; j < len2; j++) {
|
|
+ dos.writeInt(in.length);
|
|
- System.arraycopy(in[i][j].bytes, 0, out, (i * len2 + j) * GCSignal.len, GCSignal.len);
|
|
+ for (int i = 0; i < in.length; i++)
|
|
|
|
+ dos.write(in[i].bytes);
|
|
|
|
+ out = baos.toByteArray();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dos.close();
|
|
|
|
+ baos.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static GCSignal[][] toDoubleGCSignalArray(byte[] in, int len1) {
|
|
+ public static GCSignal[] toGCSignalArray(byte[] in) {
|
|
- int len2 = in.length / len1 / GCSignal.len;
|
|
+ ByteArrayInputStream bais = new ByteArrayInputStream(in);
|
|
- GCSignal[][] out = new GCSignal[len1][len2];
|
|
+ DataInputStream dis = new DataInputStream(bais);
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ GCSignal[] out = null;
|
|
- for (int j = 0; j < len2; j++) {
|
|
+ try {
|
|
- byte[] b = Arrays.copyOfRange(in, (i * len2 + j) * GCSignal.len, (i * len2 + j + 1) * GCSignal.len);
|
|
+ int len1 = dis.readInt();
|
|
- out[i][j] = new GCSignal(b);
|
|
+ out = new GCSignal[len1];
|
|
|
|
+ for (int i = 0; i < len1; i++) {
|
|
|
|
+ out[i] = new GCSignal(new byte[GCSignal.len]);
|
|
|
|
+ dis.read(out[i].bytes);
|
|
|
|
+ }
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dis.close();
|
|
|
|
+ bais.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static byte[] toByteArray(GCSignal[][][] in) {
|
|
+ public static byte[] serialize(GCSignal[][] in) {
|
|
- int len1 = in.length;
|
|
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
- int len2 = in[0].length;
|
|
+ DataOutputStream dos = new DataOutputStream(baos);
|
|
- int len3 = in[0][0].length;
|
|
+ byte[] out = null;
|
|
- byte[] out = new byte[len1 * len2 * len3 * GCSignal.len];
|
|
+ try {
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ dos.writeInt(in.length);
|
|
- for (int j = 0; j < len2; j++) {
|
|
+ dos.writeInt(in[0].length);
|
|
- for (int k = 0; k < len3; k++) {
|
|
+ for (int i = 0; i < in.length; i++)
|
|
- System.arraycopy(in[i][j][k].bytes, 0, out, (i * len2 * len3 + j * len3 + k) * GCSignal.len,
|
|
+ for (int j = 0; j < in[i].length; j++)
|
|
- GCSignal.len);
|
|
+ dos.write(in[i][j].bytes);
|
|
- }
|
|
+ out = baos.toByteArray();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dos.close();
|
|
|
|
+ baos.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static GCSignal[][][] toTripleGCSignalArray(byte[] in, int len1, int len2) {
|
|
+ public static GCSignal[][] toDoubleGCSignalArray(byte[] in) {
|
|
- int len3 = in.length / len1 / len2 / GCSignal.len;
|
|
+ ByteArrayInputStream bais = new ByteArrayInputStream(in);
|
|
- GCSignal[][][] out = new GCSignal[len1][len2][len3];
|
|
+ DataInputStream dis = new DataInputStream(bais);
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ GCSignal[][] out = null;
|
|
- for (int j = 0; j < len2; j++) {
|
|
+ try {
|
|
- for (int k = 0; k < len3; k++) {
|
|
+ int len1 = dis.readInt();
|
|
- byte[] b = Arrays.copyOfRange(in, (i * len2 * len3 + j * len3 + k) * GCSignal.len,
|
|
+ int len2 = dis.readInt();
|
|
- (i * len2 * len3 + j * len3 + k + 1) * GCSignal.len);
|
|
+ out = new GCSignal[len1][len2];
|
|
- out[i][j][k] = new GCSignal(b);
|
|
+ for (int i = 0; i < len1; i++)
|
|
|
|
+ for (int j = 0; j < len2; j++) {
|
|
|
|
+ out[i][j] = new GCSignal(new byte[GCSignal.len]);
|
|
|
|
+ dis.read(out[i][j].bytes);
|
|
}
|
|
}
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dis.close();
|
|
|
|
+ bais.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static byte[] toByteArray(GCSignal[][][][] in) {
|
|
+ public static byte[] serialize(GCSignal[][][] in) {
|
|
- int len1 = in.length;
|
|
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
- int len2 = in[0].length;
|
|
+ DataOutputStream dos = new DataOutputStream(baos);
|
|
- int len3 = in[0][0].length;
|
|
+ byte[] out = null;
|
|
- int len4 = in[0][0][0].length;
|
|
+ try {
|
|
- byte[] out = new byte[len1 * len2 * len3 * len4 * GCSignal.len];
|
|
+ dos.writeInt(in.length);
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ dos.writeInt(in[0].length);
|
|
- for (int j = 0; j < len2; j++) {
|
|
+ dos.writeInt(in[0][0].length);
|
|
- for (int k = 0; k < len3; k++) {
|
|
+ for (int i = 0; i < in.length; i++)
|
|
- for (int l = 0; l < len4; l++) {
|
|
+ for (int j = 0; j < in[i].length; j++)
|
|
- System.arraycopy(in[i][j][k][l].bytes, 0, out,
|
|
+ for (int k = 0; k < in[i][j].length; k++)
|
|
- (i * len2 * len3 * len4 + j * len3 * len4 + k * len4 + l) * GCSignal.len, GCSignal.len);
|
|
+ dos.write(in[i][j][k].bytes);
|
|
- }
|
|
+ out = baos.toByteArray();
|
|
- }
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dos.close();
|
|
|
|
+ baos.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
|
|
|
|
- public static GCSignal[][][][] toQuadGCSignalArray(byte[] in, int len1, int len2, int len3) {
|
|
+ public static GCSignal[][][] toTripleGCSignalArray(byte[] in) {
|
|
- int len4 = in.length / len1 / len2 / len3 / GCSignal.len;
|
|
+ ByteArrayInputStream bais = new ByteArrayInputStream(in);
|
|
- GCSignal[][][][] out = new GCSignal[len1][len2][len3][len4];
|
|
+ DataInputStream dis = new DataInputStream(bais);
|
|
- for (int i = 0; i < len1; i++) {
|
|
+ GCSignal[][][] out = null;
|
|
- for (int j = 0; j < len2; j++) {
|
|
+ try {
|
|
- for (int k = 0; k < len3; k++) {
|
|
+ int len1 = dis.readInt();
|
|
- for (int l = 0; l < len4; l++) {
|
|
+ int len2 = dis.readInt();
|
|
- byte[] b = Arrays.copyOfRange(in,
|
|
+ int len3 = dis.readInt();
|
|
- (i * len2 * len3 * len4 + j * len3 * len4 + k * len4 + l) * GCSignal.len,
|
|
+ out = new GCSignal[len1][len2][len3];
|
|
- (i * len2 * len3 * len4 + j * len3 * len4 + k * len4 + l + 1) * GCSignal.len);
|
|
+ for (int i = 0; i < len1; i++)
|
|
- out[i][j][k][l] = new GCSignal(b);
|
|
+ for (int j = 0; j < len2; j++)
|
|
|
|
+ for (int k = 0; k < len3; k++) {
|
|
|
|
+ out[i][j][k] = new GCSignal(new byte[GCSignal.len]);
|
|
|
|
+ dis.read(out[i][j][k].bytes);
|
|
}
|
|
}
|
|
- }
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dis.close();
|
|
|
|
+ bais.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return out;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static byte[] serialize(GCSignal[][][][] in) {
|
|
|
|
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
|
|
+ DataOutputStream dos = new DataOutputStream(baos);
|
|
|
|
+ byte[] out = null;
|
|
|
|
+ try {
|
|
|
|
+ dos.writeInt(in.length);
|
|
|
|
+ dos.writeInt(in[0].length);
|
|
|
|
+ dos.writeInt(in[0][0].length);
|
|
|
|
+ dos.writeInt(in[0][0][0].length);
|
|
|
|
+ for (int i = 0; i < in.length; i++)
|
|
|
|
+ for (int j = 0; j < in[i].length; j++)
|
|
|
|
+ for (int k = 0; k < in[i][j].length; k++)
|
|
|
|
+ for (int l = 0; l < in[i][j][k].length; l++)
|
|
|
|
+ dos.write(in[i][j][k][l].bytes);
|
|
|
|
+ out = baos.toByteArray();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dos.close();
|
|
|
|
+ baos.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return out;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static GCSignal[][][][] toQuadGCSignalArray(byte[] in) {
|
|
|
|
+ ByteArrayInputStream bais = new ByteArrayInputStream(in);
|
|
|
|
+ DataInputStream dis = new DataInputStream(bais);
|
|
|
|
+ GCSignal[][][][] out = null;
|
|
|
|
+ try {
|
|
|
|
+ int len1 = dis.readInt();
|
|
|
|
+ int len2 = dis.readInt();
|
|
|
|
+ int len3 = dis.readInt();
|
|
|
|
+ int len4 = dis.readInt();
|
|
|
|
+ out = new GCSignal[len1][len2][len3][len4];
|
|
|
|
+ for (int i = 0; i < len1; i++)
|
|
|
|
+ for (int j = 0; j < len2; j++)
|
|
|
|
+ for (int k = 0; k < len3; k++)
|
|
|
|
+ for (int l = 0; l < len4; l++) {
|
|
|
|
+ out[i][j][k][l] = new GCSignal(new byte[GCSignal.len]);
|
|
|
|
+ dis.read(out[i][j][k][l].bytes);
|
|
|
|
+ }
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dis.close();
|
|
|
|
+ bais.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return out;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static byte[] serialize(Bucket[] in) {
|
|
|
|
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
|
|
+ DataOutputStream dos = new DataOutputStream(baos);
|
|
|
|
+ byte[] out = null;
|
|
|
|
+ try {
|
|
|
|
+ byte[] b = serialize(Bucket.bucketsToTuples(in));
|
|
|
|
+ dos.writeInt(in.length);
|
|
|
|
+ dos.writeInt(in[0].getNumTuples());
|
|
|
|
+ dos.writeInt(in[1].getNumTuples());
|
|
|
|
+ dos.writeInt(b.length);
|
|
|
|
+ dos.write(b);
|
|
|
|
+ out = baos.toByteArray();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dos.close();
|
|
|
|
+ baos.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return out;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static Bucket[] toBucketArray(byte[] in) {
|
|
|
|
+ ByteArrayInputStream bais = new ByteArrayInputStream(in);
|
|
|
|
+ DataInputStream dis = new DataInputStream(bais);
|
|
|
|
+ Bucket[] out = null;
|
|
|
|
+ try {
|
|
|
|
+ int d = dis.readInt();
|
|
|
|
+ int sw = dis.readInt();
|
|
|
|
+ int w = dis.readInt();
|
|
|
|
+ int bytes = dis.readInt();
|
|
|
|
+ byte[] b = new byte[bytes];
|
|
|
|
+ dis.read(b);
|
|
|
|
+ Tuple[] tuples = toTupleArray(b);
|
|
|
|
+ out = Bucket.tuplesToBuckets(tuples, d, sw, w);
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dis.close();
|
|
|
|
+ bais.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return out;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static byte[] serialize(ArrayList<byte[]> in) {
|
|
|
|
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
|
|
+ DataOutputStream dos = new DataOutputStream(baos);
|
|
|
|
+ byte[] out = null;
|
|
|
|
+ try {
|
|
|
|
+ dos.writeInt(in.size());
|
|
|
|
+ dos.writeInt(in.get(0).length);
|
|
|
|
+ for (int i = 0; i < in.size(); i++)
|
|
|
|
+ dos.write(in.get(i));
|
|
|
|
+ out = baos.toByteArray();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dos.close();
|
|
|
|
+ baos.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return out;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static ArrayList<byte[]> toArrayList(byte[] in) {
|
|
|
|
+ ByteArrayInputStream bais = new ByteArrayInputStream(in);
|
|
|
|
+ DataInputStream dis = new DataInputStream(bais);
|
|
|
|
+ ArrayList<byte[]> out = null;
|
|
|
|
+ try {
|
|
|
|
+ int len = dis.readInt();
|
|
|
|
+ int bytes = dis.readInt();
|
|
|
|
+ out = new ArrayList<byte[]>(len);
|
|
|
|
+ for (int i = 0; i < len; i++) {
|
|
|
|
+ byte[] b = new byte[bytes];
|
|
|
|
+ dis.read(b);
|
|
|
|
+ out.add(b);
|
|
|
|
+ }
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ } finally {
|
|
|
|
+ try {
|
|
|
|
+ dis.close();
|
|
|
|
+ bais.close();
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return out;
|
|
return out;
|