📄 rdtpacket.java
字号:
package org.tuna.net.rdt;
/**
* @(#)RdtPacket.java
*
* RdtPacket application
*
* @author Tuna
* @version 1.00 2006/12/20
*/
class RdtPacket implements Comparable
{
private byte dataSort;
private int dataNum;
private int dataLen;
private byte[] data;
/**
* 解析提供的字节数组,构造对象
*/
public RdtPacket(byte[] d)
{
dataSort = d[0];
dataNum = readInt(d, 1);
dataLen = readInt(d, 5);
data = new byte[dataLen];
System.arraycopy(d, 9, data, 0, dataLen);
}
/**
* 用所给具体信息构造对象
* @param s 类型
* @param n 编号
* @param d 数据
*/
public RdtPacket(int s, int n, byte[] d)
{
//dataSort = (byte)-1;
dataSort = (byte)s;
dataNum = n;
dataLen = d.length;
data = d;
}
// ------ Public Methods ------
public int compareTo(Object o)
{
if (getNum() > ((RdtPacket)o).getNum())
return 1;
else if (getNum() == ((RdtPacket)o).getNum())
return 0;
else
return -1;
}
public byte[] getData()
{
return data;
}
public int getLen()
{
return dataLen;
}
public int getNum()
{
return dataNum;
}
public byte[] getPostBytes()
{
byte[] post = new byte[9 + dataLen];
post[0] = dataSort;
System.arraycopy(toBytes(dataNum), 0, post, 1, 4);
System.arraycopy(toBytes(dataLen), 0, post, 5, 4);
System.arraycopy(data, 0, post, 9, data.length);
return post;
}
public byte getSort()
{
return dataSort;
}
public void setData(byte[] d)
{
data = d;
dataLen = d.length;
}
public void setNum(int dn)
{
dataNum = dn;
}
public void setSort(byte s)
{
dataSort = s;
}
public void setSort(int s)
{
dataSort = (byte)s;
}
public byte[] toPostBytes()
{
byte[] post = new byte[9 + dataLen];
post[0] = dataSort;
System.arraycopy(toBytes(dataNum), 0, post, 1, 4);
System.arraycopy(toBytes(dataLen), 0, post, 5, 4);
System.arraycopy(data, 0, post, 9, data.length);
return post;
}
// ------ Private Methods ------
private int readInt(byte[] b, int pos)
{
int result = 0;
int[] iss = new int[4];
for(int i = 0; i < 4; i++, pos++)
iss[i] = toInt(b[pos]);
for(int i = 0; i < 4; i++)
result = (result << 8) | iss[i];
return result;
}
//将整数转化为长度为四的字节数组
private byte[] toBytes(int n)
{
byte[] b = new byte[4];
b[0] = (byte)(n >> 24);
b[1] = (byte)(n >> 16);
b[2] = (byte)(n >> 8);
b[3] = (byte)n;
return b;
}
private int toInt(byte b)
{
int r = (int)b;
return (r < 0) ? (r & 127 | 128) : r;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -