I want to do——输入流readline阻塞问题

  据悉,外界对程序员的印象不是木讷就是死板,不是最笨就是不爱说话,不是宅就是闷骚。昨天我们老左批评我说,自从你写了程序了,你以前的优点都退化了。放在去年,我还觉得我没什么啊,程序员就是这样啊,那是因为我专注,我热爱,我就要做一个程序员。

但现在不那么想了,程序员就不能有很好的与人沟通的能力了?程序员就不能有强壮的体魄了?程序员就必须丢掉自己的开朗吗?这些真的都不属于程序员了吗?那些都是我的借口,是我自己以程序员自居,包庇了自己。那些木讷的不懂说话的是不够优秀的程序员(不包括爱因斯垣那种程序员奥)。

  继续说上一次的小程序,对于我上层应用写多了,对字符字节16进制网络传输那些偏底层的知识了解的很少。传感器客户端要接收的是通过串口转网口的16进制的一串命令“"0C 03 00 2A 00 0C 65 1”。

  // private String commond="0C 03 00 2A 00 0C 65 1A";我这种蠢到家的想法,拿字符串往传感器里write。

  正确的打开方式应该是,byte[] commondTyte = { 0x0C, 0x03, 0x00, 0x2A,0x00, 0x16, (byte) 0xE4, (byte) 0xD1 };

  再附上十六进制与字符串相互转换代码

  

 1 public static String bytesToHexString(byte[] src) {
 2             StringBuilder stringBuilder = new StringBuilder("");
 3             if (src == null || src.length <= 0) {
 4                 return null;
 5             }
 6             for (int i = 0; i < src.length; i++) {
 7                 int v = src[i] & 0xFF;
 8                 String hv = Integer.toHexString(v);
 9                 if (hv.length() < 2) {
10                     stringBuilder.append(0);
11                 }
12                 stringBuilder.append(hv);
13             }
14             return stringBuilder.toString();
15         }
16
17         public static String BytesHexString(byte[] b) {
18             String ret = "";
19             for (int i = 0; i < b.length; i++) {
20                 String hex = Integer.toHexString(b[i] & 0xFF);
21                 if (hex.length() == 1) {
22                     hex = ‘0‘ + hex;
23                 }
24                 ret += hex.toUpperCase();
25             }
26             return ret;
27         }

还遇到了一个问题, 再inputstream流里读出传感器过来的数据,第一想法是while(is.readline())。但是程序总是被readline阻塞掉,我的解决办法是下面这种。dis是dataInputstream对象

1      while (dis.read(bytes) != -1) {
2             if (dis.available() == 0) {
3
4                 break;
5             }
6       }

读取多个字节时,InputStream.available()方法,这个方法可以在读写操作前先得知数据流里有多少个字节可以读取。需要注意的是,如果这个方法用在从本地文件读取数据时,一般不会遇到问题,但如果是用于网络操作,就经常会遇到一些麻烦。比如字符读少了之类。

今天就写到这,明天写java http发送请求和java和php直接的加密传输

结尾的情诗叫,《我愿意是激流》。

我愿意是激流 ,是山里的小河,在崎岖的路上,在岩石上经过。

只要我的爱人,是一条小鱼,在我的浪花中,快乐的游来游去。

我愿意是荒林,在河流的两岸,面对一阵阵狂风,我勇敢地作战。

只要我的爱人,是一只小鸟,在我的稠密的树枝间作客鸣叫。

我愿意是废墟,在峻峭的山崖,这静默的毁灭,并不使我懊丧。

只要我的爱人,是青青的长春藤,沿着我荒凉的额头,亲密的攀援而上。

我愿意是草屋,在深深的山谷底,草屋的顶上,饱受着风雨的打击。

只要我的爱人,是可爱的火焰,在我的炉子里,愉快的缓缓闪现。

我愿意是云朵,是灰色的破旗,在广漠的空中,懒懒地飘来飘去。

只要我的爱人,是珊瑚似的夕阳,傍着我苍白的脸,显出鲜艳的辉煌。

今晚加未来女微信,祝我好运。下面是我写。

我愿意是书本,在读者的手中,接受每一次翻阅,我无保留的分享。

只要我的爱人,是黑色的墨水,填满我的每一页,这就是我的全部。

时间: 2024-10-20 18:25:21

I want to do——输入流readline阻塞问题的相关文章

Android中使用BufferedReader.readline阻塞读取不到数据,但是ready返回true

通过socket测试工具在电脑上发送消息,Android真机可以收到响应BufferedReader.ready()返回true,但是readline却一直阻塞. 原因:readline()只有在遇到换行符的时候才会结束,因为发消息的时候加一个换行符即可. 测试工具下载地址:http://files.cnblogs.com/files/feijian/SocketTool.rar 附上我的socket客户端代码: public class QpushClient implements Runna

被readLine()折腾了一把

虽然写IO方面的程序不多,但BufferedReader/BufferedInputStream倒是用过好几次的,原因是: 它有一个很特别的方法:readLine(),使用起来特别方便,每次读回来的都是一行,省了很多手动拼接buffer的琐碎: 它比较高效,相对于一个字符/字节地读取.转换.返回来说,它有一个缓冲区,读满缓冲区才返回:一般情况下,都建议使用它们把其它Reader/InputStream包起来,使得读取数据更高效. 对于文件来说,经常遇到一行一行的,特别相符情景. 这次是在蓝牙开发

BufferedWriter.write()与BufferedReader.readLine() (附带Java中的Runtime exec)

昨天在实现一个Java程序启动执行C++程序中,遇到了一些问题,先准备把它记录下来(利人利己) 准备实现的测试功能是这样的:在一个java程序中启动一个C++可执行程序,然后java程序和C++程序相互通信(java端发送消息给C++程序处理,C++处理完成后将返回一个结果消息给java程序.不断往返循环直至输入exit指令结束). 首先,在一个java程序中启动一个C++可执行程序 使用的是java的Runtime.getRuntime().exec(),Process类exec()官方说明 

java网络通信:同步阻塞式I/O模型(BIO)

缺点:一个线程只能处理一个客户端连接 服务端: public class TimeServer { public static void main(String[] args) throws IOException { int port = 8080; ServerSocket server = null; try { server = new ServerSocket(port); System.out.println("The time server is start in port : &

Java阻塞IO与非阻塞IO

IO: IO 是主存和外部设备 ( 硬盘.终端和网络等 ) 拷贝数据的过程. IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成. 阻塞与非阻塞: 一辆从 A 开往 B 的公共汽车上,路上有很多点可能会有人下车.司机不知道哪些点会有哪些人会下车,对于需要下车的人,如何处理更好? 司机过程中定时询问每个乘客是否到达目的地,若有人说到了,那么司机停车,乘客下车. ( 类似阻塞式 ) 每个人告诉售票员自己的目的地,然后睡觉,司机只和售票员交互,到了某个点由售票员通知乘客下车. ( 类似非阻

关于java中BufferedReader的read()及readLine()方法的使用心得

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket. 从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失现象 String str  = null;br=new BufferedReader(new FileReader(fileName));do{  str

使用synchronized阻塞后台服务进程,使之一直运行

在使用dubbo启动服务端时,需要使后台一直运行,看网上是使用输入流来阻塞: System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟: 找到一种新的方式,使用锁这个对象类来阻塞 使之不关闭 解释:  synchronized (XXX.class) XXX.class本身是XXX类的一个静态属性,也是一个对象. 锁XXX.class的意思就是对整个类加锁,也就是说无论创建了多少个XXX类的对象,这些对象都共享一个相同的锁标记. 使用如下: <span style=&qu

JAVA笔记(十五)

键盘录入对象,要自定义结束标志,如果是文件,就不必定义结束文件. Tcp协议代码 package cn.itcast_06; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; /* * TCP协议发送数据: * A:创建发送端的Socket对象 *               这一步如果成功,就说明连接已经建立成功了. * B:获取输出流,写数据 * C:释放资源 * * 连接被拒绝.

day26 案例源码

day26 案列列表A:UDP            a:最基本的UDP协议发送和接收数据            b:把发送数据改进为键盘录入            c:一个简易聊天小程序并用多线程改进B:TCP            a:最基本的TCP协议发送和接收数据            b:服务器给出反馈            c:客户端键盘录入服务器控制台输出            d:客户端键盘录入服务器写到文本文件            e:客户端读取文本文件服务器控制台输出