移动开发中的通信架构(二) (四)

2014-11-24 02:43:03 · 作者: · 浏览: 2

public void writeBytes2(int[][] v) {
writeLength(v.length);
if (v.length > 0) {
writeLength(v[0].length);
for (int i = 0; i < v.length; i++) {
for (int j = 0; j < v[0].length; j++) {
writeByte(v[i][j]);
}
}
}
}

public void writeShort(int v) {
try {
out.write((v >>> 0) & 0xff);
out.write((v >>> 8) & 0xff);
} catch (Exception ex) {
throw new RuntimeException();
}
}

public void writeShorts(int[] v) {
writeLength(v.length);
for (int i = 0; i < v.length; i++) {
writeShort(v[i]);
}
}

public void writeShorts2(int[][] v) {
writeLength(v.length);
if (v.length > 0) {
writeLength(v[0].length);
for (int i = 0; i < v.length; i++) {
for (int j = 0; j < v[0].length; j++) {
writeShort(v[i][j]);
}
}
}
}

public void writeInt(int v) {
try {
out.write((v >>> 0) & 0xff);
out.write((v >>> 8) & 0xff);
out.write((v >>> 16) & 0xff);
out.write((v >>> 24) & 0xff);
} catch (Exception ex) {
throw new RuntimeException();
}
}

public void writeInts(int[] v) {
writeLength(v.length);
for (int i = 0; i < v.length; i++) {
writeInt(v[i]);
}
}

public void writeInts2(int[][] v) {
writeLength(v.length);
if (v.length > 0) {
writeLength(v[0].length);
for (int i = 0; i < v.length; i++) {
for (int j = 0; j < v[0].length; j++) {
writeInt(v[i][j]);
}
}
}
}

private int getSize(int limit) {
if (limit >= -128 && limit <= 127) {
return 1;
}
if (limit >= -32768 && limit <= 32767) {
return 2;
}
return 4;
}

public void writeNumbers(int[] v, int limit) {
int size = getSize(limit);
writeByte(size);
if (size == 1) {
writeBytes(v);
} else if (size == 2) {
writeShorts(v);
} else {
writeInts(v);
}
}

public void writeNumbers2(int[][] v, int limit) {
int size = getSize(limit);
writeByte(size);
if (size == 1) {
writeBytes2(v);
} else if (size == 2) {
writeShorts2(v);
} else {
writeInts2(v);
}
}

public void writeLong(long v) {
try {
out.write(((int) v >>> 0) & 0xff);
out.write(((int) v >>> 8) & 0xff);
out.write(((int) v >>> 16) & 0xff);
out.write(((int) v >>> 24) & 0xff);
out.write(((int) v >>> 32) & 0xff);
out.write(((int) v >>> 40) & 0xff);
out.write(((int) v >>> 48) & 0xff);
out.write(((int) v >>> 56) & 0xff);
} catch (Exception ex) {
throw new RuntimeException();
}
}

public void writeStringTrade(String v) {
try {
byte[] tmp = v.getBytes("UTF-8");
out.write(tmp);
} catch (Exception ex1) {
}
}

public void writeString(String v) {
try {
byte[] tmp = v.getBytes("UTF-8");
writeLength(tmp.length);
out.write(tmp);
} catch (Exception ex1) {
}

}

public void writeStringArray(String[] v) {
for (int i = 0; i < v.length; i++) {
writeString(v[i]);
}
}

public void writeStrings(String[] v) {
writeLength(v.length);
for (int i = 0; i < v.length; i++) {
writeString(v[i]);
}
}

public void writeStrings2(String[][] v) {
writeLength(v.length);
for (int i = 0; i < v.length; i++) {
writeStrings(v[i]);
}
}

public void writeByteArray(byte[] v) {
writeLength(v.length);
for (int i = 0; i < v.length; i++) {
writeByte(v[i]);
}
}


public void writeByteArray2(byte[] v) {
for (int i = 0; i < v.length; i++) {
writeByte(v[i]);
}
}

public int getType() {
return commID;
}

/**
* 此方法可以实现对程序数据的加密
*/
public byte[] getBytes() {
if (!bTradeCipher) {
return bout.toByteArray();
} else {
byte[] data = bout.toByteArray();
for (int i = 0; i < data.length; i++) {
data[i] = (byte) (data[i] ^ Globe.key[i % Globe.key.length]);
}
return data;
}
}

public void writeVector(Vector v) {
int num = v.size();
writeLength(num);
for (int i = 0; i < num; i++) {
writeString((String) v.ele