数据采集器核心思想

原创 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;  
    } 

}


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

OpenTSDB数据采集器tcollector介绍及运行说明

摘自optntsdb.net的说明: tcollector tcollector is a client-sideprocess that gathers data from local coll...

如何选购盘点机,条码数据采集器?需要注意哪些事项?比如:金蝶盘点机,药品盘点机,超市盘点机,图书盘点机,服装盘点机等

随着条码技术的普遍推广,仓储管理信息化技术的发展,越来越多的企业均会上一套进销存管理软件来进行仓储管理。但是随着商品的越来越多,库存流转越来越复杂,我们录入各种单据的工作量也越来越大,由于人工录入大量...

googlemap数据采集器

转 :http://www.cnblogs.com/liongis/archive/2010/05/26/1744663.html 前几天在和一个朋友聊天的时候,他说想从这GoogleMap上面...

汉码盘点机无缝对接无缝对【思讯服装之星V9】思讯服装之星盘点机条码数据采集器PDA

【思讯商业之星V9】。通过WIFI,3G,4G网络与总部实时数据交互。在盘点机上扫描条码,即可自动生成后台数据库服务器中的各种单据。采购入库,采购退货,批发销售,批发退货,仓库盘点,实时库存查询(实时...

无线数据采集器设计

摘要: 本设计是为某公司的新产品——生产现场无线数据采集器进行产品形态设计和人机界面设计。由于这款产品的应用环境为生产现场的物流信息传递,所以设计时除了要满足功能对产品的需求以外,还要考虑到工作环境里...

Java网页数据采集器[续篇-远程操作]

本期概述 上期我们学习了html页面采集后的数据查询, 但这仅仅是在本地查询数据库,如果我们想通过远程操作来进行数据的采集,存储和查询,那又该怎么做呢? 今天我们一起来学习下:如何通过本地客户端远...

用java实现简单快速的webservice客户端/数据采集器(支持soap1.1和soap1.2标准,支持utf-8编码)

前言: 用了cxf,axis等各种wbeservice实现库,简单试用了一下动态调用的方式,很不满意,完全无法满足业务的需要,所以自己实现了一个webservice采集客户端,方便动态调用外部webs...
  • eguid_1
  • eguid_1
  • 2017年03月15日 10:46
  • 1105

金蝶KIS商贸高级版4.0汉码盘点机使用说明书-金蝶KIS条码数据采集器,金蝶KIS盘点机PDA

PDA与“金蝶KIS商贸高级版”无缝对接,通过WIFI,3G/4G无线网络连接后台数据库,实时与后台数据库进行数据传输。在PDA上可以通过扫描条码完成采购收货,出库校验,销售出库,仓库盘点,库存查询的...

数据采集器-架构介绍

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

资产盘点数据采集器 扫描枪(器)PDA应用APP

通过条码或者RFID技术结合PDA手持终端可实现数据采集自动化, 企业部门对固定资产进行条码预分配,并打印粘贴在固定资产上,当需要盘点时,由资产管理中心统一分配盘点任务到PDA手持终端上,盘点员只需拿...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据采集器核心思想
举报原因:
原因补充:

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