做项目时需要拆包、组包 未方便进行字节清算、处理封装一个iOS版的ByteBuffer
安卓同事发了一份代码 如下
byte[] data = new byte[1024];
ByteBuffer byteBuffer = ByteBuffer.wrap(data, 0, 1024);
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);byteBuffer.put(SCREEN_COPY_VERSION);
byteBuffer.putInt(SERVER_TCP_LISTEN_PORT);byteBuffer.put((byte) localAddress.length());
byteBuffer.put(localAddress.getBytes());
byteBuffer.put((byte) serverName.length());
byteBuffer.put(serverName.getBytes());
byteBuffer.put((byte) serverUuid.length());
byteBuffer.put(serverUuid.getBytes());
依葫芦画瓢 搞了一个iOS版本的ByteBuffer其中LittleEndian表示小端模式BigEndian大端模式 项目中进行组包 使用方法如下 其中put:表示后面是Byte类型1个字节 putInt 表示int类型4个字节等等
NSString *add = [ProjectHelp getCurrentLocalIP];
ByteBuffer *buffer = [ByteBuffer initWithOrder:LittleEndian];
[buffer put:SCREEN_COPY_VERSION];
[buffer putInt:5461];
[buffer put:add.length];
[buffer putData:[add dataUsingEncoding: NSUTF8StringEncoding]];
[self.gcdUdpSocket sendData:buffer.convertNSData toHost:@"239.30.30.30" port:3030 withTimeout:-1 tag:0];
项目中进行拆 使用方法如下
ByteBuffer *buffer = [ByteBuffer initWithOrder:LittleEndian];
buffer.data = data.mutableCopy;
Byte version = [buffer get];
int packetLen = [buffer getInt];
int msgType = [buffer getInt];
int keyIndex = [buffer getInt];
int key = [buffer getInt];
当然返回的字节格式 是根据后台约定好的 组包、拆包这样就简便很多
ByteBuffer字节处理 可是自身项目要求对put和get进行变动
代码下载地址
https://download.csdn.net/download/lixianyue1991/14990440