java socket如何接收保证能读完数据
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍java socket如何接收保证能读完数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!socket接收保证能读完数据// private static
千家信息网最后更新 2026年11月01日java socket如何接收保证能读完数据
这篇文章主要介绍java socket如何接收保证能读完数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
socket接收保证能读完数据
// private static byte[] readData(InputStream in,byte[] bData) throws IOException{// int readLength = in.read(bData);// if(readLength!=bData.length){// byte[] temp2 = readData(in,new byte[bData.length-readLength]);// System.arraycopy(temp2, 0, bData, readLength, temp2.length);// return bData;// }else{// return bData;// }// }// private static void readData(InputStream in,byte[] bData) throws IOException{// readData(in,bData,0,bData.length);// }// private static void readData(InputStream in,byte[] bData,int off,int length) throws IOException{// int readLength = in.read(bData, off, length);// if(readLength!=length){// readData(in,bData,readLength+off,length-readLength);// }// }// private static void readData(InputStream in,byte[] bData,int off,int length) throws IOException{//// while(true){// int readLength = in.read(bData, off, length);// if(readLength!=length){// off = readLength+off;// length = length-readLength;// }else{// break;// }// }// }// private static void readData(InputStream in,byte[] bData,int off,int length) throws IOException{// int readLength = 0;// do{// off = readLength+off;// length = length-readLength;// readLength = in.read(bData, off, length);// }while(readLength!=length);// } /** * 最终使用此方法 * @param in 输入流 * @param bData 读取数据 * @throws IOException */ private static void readData(InputStream in,byte[] bData) throws IOException{ int off = 0; int length = bData.length; int readLength = 0; do{ off = readLength+off; length = length-readLength; readLength = in.read(bData, off, length); }while(readLength!=length); }socket接收硬件字节数据并解析
第一次接触这种类型的项目,在处理数据过程中,发现了许多问题,记录一下,加深记忆。
硬件将数据写在一个buffer中,传输过来的是字节。
一开始我们想到的是按照字节流来接收,但是,C语言中,byte类型没有符号位,最大值位255,java中byte类型带有符号位,最大值为127,问题就出现了,当接收到的字节数据超过127时,会取第一位为符号位,后几位补码,取反再加一变成负数。(处理方法后面有写到)
后来想偷懒不处理数据的基础上,考虑用char数组接收。char一共十六位,绝对是可以接收下硬件发来的八位数据的。但是再接收数据的时候,还是出现了问题。在对字节流转变为字符流并保存到char数组中的时候,char类型会自动对数据进行处理。在char类型中,字符所对应的最大十六进制是7F,但硬件传输来的数据存在如0X80,0X8D的情况。当char类型接收到大于7F的数据时,无法处理,字符会变成乱码的格式,数据相对应的也会发生改变。在接收数据的时候就无法正确存储,更别提后期对数据进行正确处理和校验了。放弃。
最终还是要回到byte接收的方向上。和同事讨论了下,对于超过java byte类型的数据,进行相应处理后,存放在Int中,即可保证数据正确性。
处理方法:
对byte数组中的数据进行判断,当为负数时,与0xff相与,并存放在Int数组中,可以保证数据正常
ServerSocket serverSocket; try { serverSocket = new ServerSocket(9090); System.out.println("***等待客户端连接***"); Socket socket = serverSocket.accept(); InputStream is = socket.getInputStream(); byte[] datas = new byte[500]; int count = is.read(datas); int[] dataFormat=new int[500]; for(int i=0;i以上是"java socket如何接收保证能读完数据"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
数据
处理
类型
保证
字节
数组
硬件
最大
字符
时候
符号
问题
内容
方法
最大值
篇文章
负数
还是
传输
乱码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
山东特亿宝互联网科技有限公司
蓝思科技飞鸽互联网
A股互联网金融科技公司
互联网巨头反垄断金融科技
互联网 科技
互联网科技公司电话
为想互联网科技
小马过河互联网科技
互联网科技英文翻译
中正互联网科技招聘
玖二柒互联网科技公司待遇
广州恒生互联网科技有限
互联网科技与大数据专业
注册互联网科技公司经营范围大全
呼和浩特新华互联网科技学院
互联网科技大奖都有哪些公司
健康食品互联网创新科技园项目
滨湖区互联网智能科技产品有哪些
科技信息时代互联网发展
现代科技的标志之一的互联网
广东万易互联网科技有限公司惠州分公司
互联网科技未来
易互联网科技有限公司
智网互联网科技
互联网 的科技创新
奇酷互联网络科技
南山科技园互联网公司有哪些
西安小鹰速贷互联网科技有限公司
每天都有哪些好的互联网科技
科技互联网行业投资研究