(蓝牙)网络编程中,使用InputStream read方法读取数据阻塞的解决方法
2024-10-10 00:45:41
问题如题,这个问题困扰了我好几天,今天终于解决了,感谢[1]。
首先,我要做的是android手机和电脑进行蓝牙通信,android发一句话,电脑端程序至少就要做到接受到那句话。android端发送信息的代码如下:
try {
Log.i("Test", "begin saying hello world");
String test = "Hello world, I am james";
outputStream.write(test.getBytes());
Log.i("Test", "complete saying hello world"); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("Test", "fail to write 1 to server");
}
电脑服务器端接收程序如下:
byte[] bt = new byte[1024];
int bytes = inputStream.read(bt);
String test = new String(bt);
Syste.out.println(test);
最后的结果是服务器端阻塞在
int bytes = inputStream.read(bt);
没有能够得到进一步的执行。
最后在[1]中找到了解决方法。通过Inputstream中的availa()函数来获得目前流中可以读取到的字节数目,然后再读取。这个方法的意思是返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。请看改后的电脑端接收信息的代码:
int count = 0;
while(count == 0){
count = inputStream.available();
}
if( count != 0 ){
System.out.println(count);
byte[] bt = new byte[count];
int readCount = 0;
while(readCount < count){
readCount += inputStream.read(bt, readCount, count-readCount);
}
System.out.println(readCount);
String xx = new String(bt);
System.out.println(xx);
这样,就能实现完整的信息接收了。通过count来保存当前流中可以读取的字节数,然后通过read(byte[],offset,len)函数来读取流中的字节,由于网络通信中,read函数不一定能一次将所有可读的字节读完整,所以用一个readCount来记录已经读到bt数组中的字节,当readCount和count相等后,说明读取完整了。
最新文章
- Python学习Day2笔记(集合和文件操作)
- snakebar 的使用
- [插件]jQuery multiselect初始化及默认值修改
- MVC 强类型ViewData[] TempData[]
- Hadoop实战4:MapR分布式集群的安装配置及shell自动化脚本
- Ehcache入门(一)——开发环境的搭建
- Codeforces Round #346 (Div. 2) C Tanya and Toys
- C#的初学知识点
- 自己动手编写IOC框架(四)
- cookies和re
- 【Tools】Pycharm2017 windows安装与修改中文界面教程
- 【转】CentOS系统操作下安装相关各种软件
- Flume配置Multiplexing Channel Selector
- jQuery-3.事件篇---表单事件
- Python3 tkinter基础 Entry insert delete 点击按钮 向输入框赋值 或 清空
- 2Q - Fibbonacci Number
- Rime小狼毫个人配置文件
- A - Class Statistics
- 2017-2018-2 20155229《网络对抗技术》Exp1:逆向及Bof基础实践
- Beta冲刺——day1
热门文章
- C/C++基础笔试题1.1.2(十问解决方案运营商)
- U盘启动盘安装Win7/9/10系统攻略
- URAL 1727. Znaika&;#39;s Magic Numbers(数学 vector)
- 使用Mockito进行单元测试【2】—— stub 和 高级特性[转]
- c/c++和java达到swap不同功能
- ORACLE查看和更改的最大连接数
- 开源搜索引擎Iveely 0.8.0
- java_ log4j的基本配置参数
- 【高德地图API】那些年我们一起开发的APP—即LBS应用模式分享
- jquery 直接调用 wcf,面向服务的SOA架构 ( 第二天)