⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rdtpacket.java

📁 本程序可在局域网内实现聊天、传送文件功能
💻 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 + -