package com.azhon.netty.util;
/**
* 文件名: ByteUtil
* 创建时间: 2018/10/24 on 21:50
* 描述: TODO
*
* @author 阿钟
*/
public class ByteUtil {
/**
* 多个数组合并一个
*
* @return
*/
public static byte[] byteMergerAll(byte[]... bytes) {
int allLength = 0;
for (byte[] b : bytes) {
allLength += b.length;
}
byte[] allByte = new byte[allLength];
int countLength = 0;
for (byte[] b : bytes) {
System.arraycopy(b, 0, allByte, countLength, b.length);
countLength += b.length;
}
return allByte;
}
/**
* 将数据数据恢复成0
*/
public static void resetBytes(byte[] bytes) {
for (int i = 0; i < bytes.length; i++) {
bytes[i] = 0;
}
}
/**
* 计算校验和
*
* @param bytes
* @param index 校验和结果所在的下标
* @return 是否成功
*/
public static boolean checkSum(byte[] bytes, int index) {
if (index > bytes.length - 1) {
return false;
}
byte right = bytes[index];
int plus = 0;
for (int i = 0; i < bytes.length; i++) {
if (index != i) {
plus += bytes[i];
}
}
return int2Byte(plus) == right;
}
/**
* int 转byte字节
*
* @param value int数字
* @return byte 字节
*/
public static byte int2Byte(int value) {
return (byte) value;
}
/**
* byte 转int字节
*
* @param value int数字
* @return byte 字节
*/
public static int byte2Int(byte value) {
return value & 0xFF;
}
/**
* 两个十六进制字节转成一个int
*
* @return int
*/
public static int bytes2Int(byte[] bytes) {
int a = ((bytes[0] & 0xf0) >> 4) * 4096;
int b = (bytes[0] & 0x0f) * 256;
int c = bytes[1] & 0xf0;
int d = bytes[1] & 0x0f;
return a + b + c + d;
}
/**
* 4字节byte转int
*
* @return
*/
public static int fourBytes2Int(byte[] bytes) {
return (bytes[0] & 0xff)
| (bytes[1] & 0xff) << 8
| (bytes[2] & 0xff) << 16
| (bytes[3] & 0xff) << 24;
}
/**
* byte字节转Bit
* bit位(0~8位)是从右往左数的 eg:10000011 (位0:1,位2:1,位3:0)
*
* @param b 字节
* @param bitIndex 获取bit位的下标
* @return bit
*/
public static byte byteToBit(byte b, int bitIndex) {
byte[] array = new byte[8];
for (int i = 7; i >= 0; i--) {
array[i] = (byte) (b & 1);
b = (byte) (b >> 1);
}
//倒序取
return array[8 - 1 - bitIndex];
}
/**
* long转DWORD数据类型
* 低位到高位
*/
public static byte[] longToDword(long value) {
byte[] data = new byte[4];
for (int i = 0; i < data.length; i++) {
data[i] = (byte) (value >> (8 * (3 - i)));
}
return data;
}
/**
* DWORD无符号整型数据转换为java的long型
*/
public static long DwordToLong(byte buf[], int index) {
int firstByte = (0x000000FF & ((int) buf[index]));
int secondByte = (0x000000FF & ((int) buf[index + 1]));
int thirdByte = (0x000000FF & ((int) buf[index + 2]));
int fourthByte = (0x000000FF & ((int) buf[index + 3]));
return ((long) (firstByte | secondByte << 8 | thirdByte << 16 |
fourthByte << 24)) & 0xFFFFFFFFL;
}
/**
* 一个int转4个字节的byte数组
*
* @param value
* @return
*/
public static byte[] intTo4Bytes(int value) {
byte[] src = new byte[4];
src[0] = (byte) (value & 0xFF);
src[1] = (byte) ((value >> 8) & 0xFF);
src[2] = (byte) ((value >> 16) & 0xFF);
src[3] = (byte) ((value >> 24) & 0xFF);
return src;
}
public static byte[] intTo2Bytes(int value) {
byte[] src = new byte[2];
src[0] = (byte) ((value >> 8) & 0xFF);
src[1] = (byte) (value & 0xFF);
return src;
}
/**
* 把16进制字符串转换成字节数组
*
* @return byte[]
*/
public static byte[] hexStringToByte(String hex) {
int len = (hex.length() / 2);
byte[] result = new byte[len];
char[] achar = hex.toCharArray();
for (int i = 0; i < len; i++) {
int pos = i * 2;
result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
}
return result;
}
private static int toByte(char c) {
byte b = (byte) "0123456789ABCDEF".indexOf(c);
return b;
}
/**
* 计算校验和
*
* @param bytes
* @return 是否成功
*/
public static byte getSum(byte[] bytes) {
int plus = 0;
for (int i = 0; i < bytes.length; i++) {
plus += bytes[i];
}
return (byte) plus;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Netty在Android开发中的应用实战系列(一)——— 搭建服务端与客户端:https://azhon.blog.csdn.net/article/details/100569489 Netty在Android开发中的应用实战系列(二)——— Encoder | Decoder | Handler 的使用:https://azhon.blog.csdn.net/article/details/100831777 Netty在Android开发中的应用实战系列(三)——— 心跳处理 | 断线重连:https://azhon.blog.csdn.net/article/details/100941312 Netty在Android开发中的应用实战系列(四)——— 粘包 | 拆包 处理:https://azhon.blog.csdn.net/article/details/101039462
资源推荐
资源详情
资源评论
收起资源包目录
NettyAndroid,Netty在Android中的使用 (131个子文件)
gradlew.bat 2KB
executionHistory.bin 2.77MB
classAnalysis.bin 1.03MB
jarAnalysis.bin 397KB
fileHashes.bin 130KB
taskHistory.bin 28KB
outputFiles.bin 24KB
resourceHashesCache.bin 18KB
last-build.bin 1B
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.gitignore 208B
.gitignore 7B
build.gradle 892B
build.gradle 565B
settings.gradle 48B
gradlew 5KB
app.iml 13KB
NettyAndroid.iml 946B
Netty-Android.iml 867B
netty-all-4.1.39.Final.jar 3.87MB
gradle-wrapper.jar 53KB
ByteUtil.java 5KB
NettyClient.java 4KB
MainActivity.java 3KB
ClientHandler.java 3KB
NettyServer.java 3KB
ServerHandler.java 2KB
ClientDecoder.java 1KB
ServerDecoder.java 1KB
ConnectListener.java 1KB
ClientEncoder.java 1KB
ServerEncoder.java 1KB
BaseActivity.java 1016B
PkgDataBean.java 1007B
ExampleInstrumentedTest.java 746B
ExampleUnitTest.java 376B
buildOutputCleanup.lock 17B
javaCompile.lock 17B
fileContent.lock 17B
executionHistory.lock 17B
fileHashes.lock 17B
.name 13B
ic_launcher_round.png 15KB
ic_launcher_round.png 10KB
ic_launcher.png 9KB
ic_launcher_round.png 7KB
ic_launcher.png 6KB
ic_launcher_round.png 5KB
ic_launcher.png 4KB
ic_launcher.png 3KB
ic_launcher_round.png 3KB
ic_launcher.png 2KB
proguard-rules.pro 751B
gradle.properties 1KB
local.properties 426B
gradle-wrapper.properties 235B
cache.properties 54B
gc.properties 0B
gc.properties 0B
gradle_models.ser 138KB
build_file_checksums.ser 535B
workspace.xml 30KB
misc.xml 6KB
ic_launcher_background.xml 5KB
ic_launcher_foreground.xml 2KB
activity_main.xml 2KB
Gradle__androidx_test_espresso_espresso_idling_resource_3_1_1_aar.xml 963B
Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml 906B
Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml 898B
Gradle__androidx_test_espresso_espresso_core_3_1_1_aar.xml 886B
Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml 858B
Gradle__androidx_appcompat_appcompat_1_0_2_aar.xml 834B
Gradle__androidx_fragment_fragment_1_0_0_aar.xml 826B
Gradle__androidx_test_monitor_1_1_1_aar.xml 816B
Gradle__androidx_test_ext_junit_1_1_0_aar.xml 815B
Gradle__androidx_test_runner_1_1_1_aar.xml 809B
Gradle__androidx_print_print_1_0_0_aar.xml 802B
Gradle__androidx_test_core_1_1_0_aar.xml 796B
Gradle__androidx_core_core_1_0_1_aar.xml 794B
Gradle__org_hamcrest_hamcrest_integration_1_3_jar.xml 781B
AndroidManifest.xml 776B
Gradle__androidx_annotation_annotation_1_0_0_jar.xml 753B
Gradle__org_hamcrest_hamcrest_library_1_3_jar.xml 752B
Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml 736B
Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml 733B
Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml 732B
Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml 727B
Gradle__com_squareup_javawriter_2_1_1_jar.xml 725B
Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml 723B
Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml 723B
Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml 723B
Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml 712B
Gradle__javax_inject_javax_inject_1_jar.xml 711B
共 131 条
- 1
- 2
资源评论
- zstarx11272020-05-15还行吧,代码比较简洁了
- QQ_2783979352020-08-25非常好的demo。谢谢楼主。 278397935@qq.com 多多指教。
- 91program2019-10-23找到文章中少的一些类的定义了
Code-Porter
- 粉丝: 1w+
- 资源: 43
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 指针扫描和内存遍历二合一工具
- 基于JavaScript的在线考试系统(编号:65965158)(1).zip
- 五相电机双闭环矢量控制模型-采用邻近四矢量SVPWM-MATLAB-Simulink仿真模型包括: (1)原理说明文档(重要):包括扇区判断、矢量作用时间计算、矢量作用顺序及切时间计算、PWM波的生成
- Linux下的cursor安装包
- springboot-教务管理系统(编号:62528147).zip
- 3dmmods_倾城系列月白_by_白嫖萌新.zip
- SVPWM+死区补偿(基于电流极性)+高频注入法辨识PMSM的dq轴电感(离线辨识)-simulink
- 微信跑腿小程序的设计与实现
- 基于 Java 实现的上位机通讯程序,可与单片机进行数据交换
- screentshot-2024.12.22-20.45.35.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功