如何得到Socket收到数据的长度

本文探讨了在网络编程中,从Socket读取数据的最佳实践。初始使用固定长度的byte[]接收数据导致了空间浪费和数据不准确的问题。通过深入研究Socket的输入流方法available(),实现了动态调整缓冲区大小,确保数据完整且避免了不必要的内存占用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做的一个项目,需要从网口拿到数据,然后从Socket中取出数据并放入到 byte[] 中 ,收到的数据并不是字符串
一开始使用byte[] buf=new byte[100]; 来事先定义长度,长度太长会导致后面多了很多0,长度不好控制。

然后从网上找到的一个,先定义100,然后读完之后知道长度后再重新定义长度,但是试过之后发现数据结果不唯一,也就是数据

会出现错误。

byte[] buf=new byte[100];
int len=socket.getInputStream().read(buf);
byte[] buf1=new byte[len];
socket.getInputStream().read(buf1);

最后在进去Socket.getInputStream()类里面找到一个获取流大小的方法available(),如下:

List<InputStream> inputList = new ArrayList<InputStream>();
InputStream in = c_Socket.getInputStream();
inputList.add(in);
byte[] b = new byte[inputList.get(i).available()];
int i = inputList.get(i).read(b);

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值