• 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直接的加密传输

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

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

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

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

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

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

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

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

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

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

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

    Good luck boy 

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

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

  • 相关阅读:
    Linux更新时,出现无法更新锁
    Linux显示su:认证失败
    08 redis的缓存预热,雪崩,击穿,穿透问题以及常用的监控参数
    06 redis的哨兵系统的工作流程
    05 redis的主从复制机制的工作流程以及相关基础知识
    03 redis的事务以及锁、过期数据的删除策略、逐出算法、配置文件的核心配置参数
    02 jedis以及redis的持久化
    01 redis的5种基本数据类型的介绍,使用以及应用场景
    M1 MySQL事务知识点的总结
    02 Java文件读写通道的使用以及文件的基本操作方法
  • 原文地址:https://www.cnblogs.com/zzuuoo666/p/7454285.html
Copyright © 2020-2023  润新知