数据采集器核心思想

原创 2016年06月01日 18:37:27

数据采集核心思想实现

1数据连接

 也就socket常连接,由于netty在socket连接的出色性能,用netty做socket的连接框架

2数据传输 

16进制方式进行传输

3数据解析 

对于数据解析是重中之重,有没有好的方法对数据进行管理呢?对于一行数据,谁该处理他呢?该框架的核心思想就在于次。参考spring的核心思想,配置+数据bean。

       数据解析之配置封装

比如现在有一台设备,可以上传一个人血压信息,血糖信息。为了传输这三个信息,要设置两条指令,
        血压数据
开始码(两位) 指令码(两位) 机器编号 (九位)高压(三位)低压(三位)心率(三位)上传时间(十二位) 
        10进制   &123456789140080060201606011002@    
                       & (开始码)(指令码16进制02,字符无法打印)123456789(机器编号)140(高压) 080(低压) 060(心率)     201606011002 (上传时间) @(结束码)
        16进制 26 02 31 32 33 34 35 36 37 38 39 31 34 30 30 38 30 30 36 30 32 30 31 36 30 36 30 31 31 30 30 32 40

血糖数据
       开始码(两位) 指令码(两位) 机器编号 (九位)血糖值(四位,前两位整数位,后两位小数位)上传时间(十二位)
        10进制 &1234567891001201606011002@
 & (开始码)(指令码16进制02,字符无法打印)123456789(机器编号)1001(血糖值,表示为10.01)    201606011002 (上传时间) @(结束码)
         16进制 26 03 31 32 33 34 35 36 37 38 39 31 30 30 31 32 30 31 36 30 36 30 31 31 30 30 32 
        需求摆着,那怎么配置呢
第一需要配置指令表,也就是多少个指令,供指令的路由分发
配置文件routeBaseMapper.properties 
               内容 baseMapper=02,pressure;03,blood   意思,02指令路由到血压。03指令理由到血糖
第二需要配置指令解析,对应着每条指令的解析
               driverMapper=code,0,2; 解除解析,就是把每条数据的指令码拿到
               prssure=driverNumber,2,11;up,11,14;down,14,17;bp,17,20;upTime,20,32;    血压对应配置
               blood=driverNumber,2,11;blood,11,15;upTime,15,27;  血糖对应配置
       配置有了,也就很轻松的把每条数解析成对应的数据bean了
       接下来就是如何处理把数据通过配置解析成数据bean

       数据解析之如何把数据解析成功bean

          RouterKeyDefination 对应每一条数据指令的配置
          
package com.glufine.common;

import java.util.ArrayList;
import java.util.List;

public class RouterKeyDefination {
    /**
     * 路由表达key结果集
     */
    private List<RouterSplitDefination> keyDefinations = new ArrayList<RouterSplitDefination>();
    /**
     * 当前分发器所属类别
     */
    private String keyName;
    
    public RouterKeyDefination(String keyName) {
        super();
        this.keyName = keyName;
    }
    public String getKeyName() {
        return keyName;
    }
    public void putKey(RouterSplitDefination value){
        keyDefinations.add(value);
    }
    public void removeKey(RouterSplitDefination value){
        keyDefinations.remove(keyDefinations.indexOf(value));
    }
    public List<RouterSplitDefination> getKeyDefinations(){
        return keyDefinations;
    }
    
    public RouterSplitDefination getFirstSplitDefination(){
        return keyDefinations.get(0);
    }
    
    public RouterSplitDefination getSplitDefinationByindex(int index){
        return keyDefinations.get(index);
    }
    
}
       RouterSplitDefination对于一条指令中每个数据分割单位的定义 比如高压
package com.glufine.common;

public class RouterSplitDefination implements Cloneable{
    
    private String spiltKey;
    
    private String splitValue;
    
    private int start;
    
    private int end;

    public RouterSplitDefination(String spiltKey, int start, int end) {
        super();
        this.spiltKey = spiltKey;
        this.start = start;
        this.end = end;
    }
    
    public RouterSplitDefination() {
        super();
    }
    /**
     * 大于0正向截取,小于0,逆向截取
     * @param sourceValue
     */
    public void genarateSplitVale(String sourceValue){
    	if(end<0 || start<0){
    		end = sourceValue.length()+end;
    		start = sourceValue.length()+start;
    	}
        splitValue = sourceValue.substring(start, end);
    }

    public String getSplitValue() {
        return splitValue;
    }

    public void setSplitValue(String splitValue) {
        this.splitValue = splitValue;
    }

    public String getSpiltKey() {
        return spiltKey;
    }

    public void setSpiltKey(String spiltKey) {
        this.spiltKey = spiltKey;
    }

    public int getStart() {
        return start;
    }

    public void setStart(int start) {
        this.start = start;
    }

    public int getEnd() {
        return end;
    }

    public void setEnd(int end) {
        this.end = end;
    }
    
    public RouterSplitDefination clone() {  
        RouterSplitDefination o = null;  
        try {  
            o = (RouterSplitDefination) super.clone();  
        } catch (CloneNotSupportedException e) {  
            e.printStackTrace();  
        }  
        return o;  
    } 

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

数据采集器的三大分类

批处理数据采集器离线式工作,数据批量采集器后,通过USB线或串口数据线跟计算机进行通信。 数据采集器内装有一个嵌入式操作系统(各个生产厂家独立研制开发,互不兼容),应用程序需要在操作系统上独立开...
  • qq_38853684
  • qq_38853684
  • 2017年08月11日 17:21
  • 117

数据采集器-架构介绍

说点事说说数据采集的流程数据采集一般是一个从硬件设备收集到数据,然后对对数据进行解析处理,归类,入库,供查询使用。说说踩过的坑 坑1:java多线程并发数量以及tcp粘包问题 由于数据采集是通过tc...
  • qzshiyongjie123
  • qzshiyongjie123
  • 2017年01月11日 10:54
  • 1063

CASIO DT900/dt930数据采集器设置安装使用操作

 应用程序列表:pc端:c:/barapp/bar.lodc:/barapp/ASTART.HTSc:/barapp/PATCH001.LODc:/barapp/PATCH002.LODc:/bara...
  • kelvin_deng
  • kelvin_deng
  • 2009年04月15日 10:45
  • 7988

数据采集器

#include #include #include #include #include "C:/Compiler/INCLUDE/8000lib.h"#include "C:/Compiler/IN...
  • zhangxinghua
  • zhangxinghua
  • 2007年09月24日 19:02
  • 1475

数据采集器程序开发PDA软件开发定制盘点机条码采集系统软件

特点: 1:通过操作移动手持终端上的对接软件,开销售订单,进货单,退货单,验货单等单据,无线盘点,实时掌握库存变化,查看商品资料。 2:我们的手持移动PDA端有软件,可以无缝对接各种进...
  • haohantech
  • haohantech
  • 2017年07月24日 14:17
  • 347

另类新浪微博基本数据采集方法(值得深思)

0x00 前言 有同学评论说之前绕过新浪访客系统的方法不能用了,我测试了一下,确实不能用了。原因很简单,新浪现在强制登录,没有cookie就是不行,即便是搜索引擎的爬虫也不行。 现在用谷歌搜索出来...
  • zyh_1988
  • zyh_1988
  • 2016年05月12日 14:31
  • 1089

一款全新的网页数据采集工具:爬山虎采集器

特性爬山虎采集器是一款全新的网页数据采集工具。作为一款工具软件,我们:放弃了花哨的界面,换之以快速流畅的体验。放弃了复杂的规则配置,开发了智能的自动提取算法。在基于浏览器的可视化操作上,同时保留了快速...
  • guesttt
  • guesttt
  • 2018年01月17日 21:16
  • 103

四款有名的开源海量数据采集工具

http://hi.baidu.com/nullbeta/blog/item/76e2781549d76e1d34fa418f.html 四款有名的开源海量数据采集工具 2011-...
  • sony315
  • sony315
  • 2011年10月11日 05:32
  • 5899

Spring三大核心思想之三:AOP

一.前言     在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://w...
  • zcs20082015
  • zcs20082015
  • 2017年08月09日 13:19
  • 619

火车头采集器 页面图片等信息采集

火车头采集器 页面图片等信息采集 有些采集的页面中有图片或者其他内容如链接的word文档等等,如果采集下来,并保持链接呢。 火车头采集器中给了较好的操作。 在内容采集中,选择内容下载,如果仅仅是图片,...
  • sflsgfs
  • sflsgfs
  • 2016年05月06日 08:45
  • 1465
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据采集器核心思想
举报原因:
原因补充:

(最多只允许输入30个字)