安卓同事发了一份代码 如下
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 = [Byte
做项目时需要拆包、组包 未方便进行字节清算、处理封装一个iOS版的ByteBuffer安卓同事发了一份代码 如下 byte[] data = new byte[1024]; ByteBuffer byteBuffer = ByteBuffer.wrap(data, 0, 1024); byteBuffer.order(ByteOrder.LITTLE_ENDIAN); byteBuffer.put(SCREEN_COPY_VE...
ios-
byteBuffer
[]( Lee / ios-
byteBuffer
)
ByteBuffer
*buffer = [
ByteBuffer
initWithOrder: ByteOrderLittleEndian];
#输入数据
- ( void )put:( Byte )b;
- ( void )put
ByteBuffer
:(
ByteBuffer
*)bb;
- ( void )putData:( NSData *)data;
- ( void )putShort:( short )d;
- ( void )putFloat:( float )f;
- ( void )putInt:( int )i;
- ( Byte )get:( int )index;
加密算法有很多,我在网上找了个简单的算法,可惜是C语言的, 朕很不满意 ,一怒之下,自己研究了研究,改造成了java的;
后来
安卓
和ios都需要统一后台加密,手机端解密,经过简化和进一步的研究,增加了java和
OC
的加密解密的通用算法!
简单实用,贡献给大家。
// Int convert to NSData
int num = 10;
NSData *data = [NSData dataWithBytes:&num length:sizeof(num)];
const uint8_t *byte
- (instancetype)initWithBytesN
oC
opy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)b;
初始化对象。
不进行复制字节数组操作,直接设置字节指针为bytes,长度为length。
- (instancetype)i...
//包头:42个字节,第一个字节【目前基本上没用到,无需理会】,第二个字节【表示session的长度】,3-6字节【内容的长度】,最后36字节【客户端发送请求时的标示,当服务端返回结果时,客户端用来表示是哪个请求的返回结果。就是一个GUID或UUID】
char first = target.isPrice; //第1个字节,暂时没有用到
ByteBuffer
是 Java 中用于处理二进制数据的缓冲区类,它可以在缓冲区中存储不同类型的数据,如 byte、short、int、long、float、double 等。使用
ByteBuffer
可以方便地进行数据的读取和写入,并且可以设置字节序(Byte Order)来保证数据在不同机器上的正确性。
ByteBuffer
的常用方法包括:
1. all
oc
ate(int capacity):分配一个容量为 capacity 的
ByteBuffer
。
2. put(byte[] src):将一个字节数组写入到
ByteBuffer
中。
3. get(byte[] dest):将
ByteBuffer
中的数据读取到一个字节数组中。
4. flip():将读写模式切换,将 limit 设置为当前位置,将 position 设置为 0。
5. rewind():将 position 设置为 0,使得数据可以重新读取。
6. clear():清空
ByteBuffer
,将 position 设置为 0,将 limit 设置为 capacity。
例如,下面是一个使用
ByteBuffer
写入和读取数据的示例代码:
```java
// 创建一个容量为 10 的
ByteBuffer
ByteBuffer
buffer =
ByteBuffer
.all
oc
ate(10);
// 写入数据
buffer.putInt(123);
buffer.putDouble(3.14);
buffer.putChar('A');
// 切换到读模式
buffer.flip();
// 读取数据
int intValue = buffer.getInt();
double doubleValue = buffer.getDouble();
char charValue = buffer.getChar();
System.out.println(intValue); // 输出 123
System.out.println(doubleValue); // 输出 3.14
System.out.println(charValue); // 输出 A
需要注意的是,
ByteBuffer
中的 position、limit 和 capacity 属性的含义如下:
1. position:当前读写位置。
2. limit:缓冲区的限制,即当前可以读写的最大位置。
3. capacity:缓冲区的容量,即最多可以存储多少字节数据。
在写入数据时,position 会自动向前移动,而 limit 和 capacity 不会变化;在读取数据时,position 和 limit 会随着读取的数据量自动向前移动。如果需要重新读取数据,可以使用 rewind() 方法将 position 设置为 0,如果需要清空缓冲区,可以使用 clear() 方法将 position 设置为 0,limit 设置为 capacity。
进行网络出现问题Error Domain=kCFErrorDomainCFNetwork Code=-1022 "The resource could not be loaded because th