RFID读卡器增量更新思路与代码实现

0.项目背景

上一篇文章中提到机器人项目中调用摄像头获取实时画面,这次又来了一个新的需求,要使用RFID读卡器识别区域内的商品ID并上传云端,最后由云端返回该商品信息数据。区域内的商品随时可能增加或者减少。因此我想要达到当区域内数据发生变化时根据增加或者减少的数据发送消息进行更新,从而达到增量更新的效果。

1.RFID读卡器模式

RFID厂商提供了两种盘库模式一种是实时模式,一种是缓存模式。

1.1 实时模式

即读到标签ID时立即上传,实时发送最新的数据

优点:多标签识别性能好,相应迅速,用户可以在第一时间得到标签的数据,没有延时。

缺点:会产生大量的数据。

1.2 缓存模式:即读到标签的ID后,先放入读卡器缓存,最后在需要的时候一次性将缓存中的所有ID上传。

优点:汇总上传的数据是经过过滤的没有重复的数据。

缺点:识别大量标签时每次都需要逐一对比标签信息以过滤重复数据,效率低。另外在读取缓存中的标签数据时是不能进行读写标签操作的。

2.开发思路

显然厂商提供的两种模式并不能满足我们的需求,但是实时模式与我们的需求比较接近,所以我们从实时模式入手。实时模式每次都是将最新的数据发送出来,会造成大量的数据传输,我们只需要将最近一次数据与上次数据进行比较便可获取此次数据是否有更新。如果没有更新我们则不需要继续推送数据,一但检测到更新我们就更具数据的增加、删除进行数据发送,这样就可以大大的减少数据量兵器可以满足我们的需求。

3.开发过程

由思路我们用两个list分别存储最近数据与上次数据,得益于spring boot的service为单例模式所以可以直接保存上次的数据,而不被初始化覆盖。

    private List<String> oldList = new ArrayList<>();private List<String> newList = new ArrayList<>();@Overridepublic void cache(List<String> rfidList) {newList = rfidList;/*** 进行两个数组的比较* 1、两个list比较,获取不同的元素列表* newList - oldList = 要增加的元素* oldList - newList = 要删除的元素*/List<String> add = newList.stream().filter(item -> !oldList.contains(item)).collect(toList());if (add.size() > 0){// TODO 发送增加指令直接发送newList数组到云端System.out.println("增加");}List<String> remove = oldList.stream().filter(item -> !newList.contains(item)).collect(toList());if (remove.size() > 0){// TODO 发送删除指令 newList数组到前端System.out.println("删除");}//将newList赋值给oldList 注意不能直接使用= 等号指向的是同一内存空间会跟随变化oldList.clear();for (String str : newList) {oldList.add(str);}}

4.坑

在这个的开发中遇到一个坑,这个坑把我害得好惨,同时也暴漏了自己的基础知识薄弱还需要增强。记录下来这个坑希望对大家有所帮助同时也是给自己一个记录。
上面代码最后一步需要将newList赋值给oldList最早我直接使用=来赋值

oldList = newList;

list中使用=赋值实际上是将oldList指向newList所指向的内存空间,这样随着newList在下次触发时的更新,由于oldList指向的是同一内存空间这样就造成了oldList与newList的数据永远相等。

总结:在此处赋值不能使用=

如果各位大佬有更好的思路欢迎留言讨论!!

RFID读卡器增量更新思路与代码实现相关推荐

  1. ios lua 增量更新,更新内部代码

    基于Cocos2d-x+Lua的技术架构的游戏的更新,只更新脚本即可.Lua中可以实现对于C++类的继承,更新逻辑还是比较容易的. App有两个路子:一个是基于PhoneGap或者React Nati ...

  2. datax调研及增量更新的思路

    一.Datax简介 ​ DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳定高效 ...

  3. diff git 指定时间_【GIT】从指定分支两个Tag中获取差异文件,进行代码的增量更新...

    介绍 随着DevOps兴起,在做CD代码上线交付时候,代码全量更新是很费时间的.下面代码就可以帮助我们从指定分支两个Tag中获取差异文件,进行代码的增量更新. 环境 Jenkins Git代码管理 获 ...

  4. java射频通讯开发_TCPIP通讯超高频RFID读卡器提供JAVA代码案例

    详细内容 TCPIP通讯超高频RFID读卡器提供JAVA代码案例 HXU1861DK系列超高频桌面式.移动式读卡器是一款可采用USB接口.RS232串口+Wigegand26/34接口.RS232接口 ...

  5. python 魔兽世界升级脚本_第一次用python:python脚本用来实现增量更新项目代码...

    项目采用增量更新,每次更新需要将提交到svn的代码手动一一拖到本地文件夹再拖到服务器上,非常麻烦.正好学习python,就弄了个批量复制脚本,顺便熟悉下Python语法.第一次写,很多方法不熟,写的比 ...

  6. LeetCode JAVA语言全部解题思路+答案代码+多种解法+关键注释(持续更新...)

    第一题: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组 ...

  7. BW:BW增量更新方法(假增量)

    1 说说假增量 我们都知道,对于BW来说,很多ECC的标准数据源自带了增量更新功能,每天各种凭证产生的增量数据会自动堆积到增量队列里,然后BW端做一个增量信息包按天把这些增量抽取到数据仓库里,非常轻松 ...

  8. SAP-BW数据仓库增量更新

      1    说说假增量 我们都知道,对于BW来说,很多ECC的标准数据源自带了增量更新功能,每天各种凭证产生的增量数据会自动堆积到增量队列里,然后BW端做一个增量信息包按天把这些增量抽取到数据仓库里 ...

  9. kettle spoon判断增量更新_【论文推荐】张斌等:基于改进 SOINN 算法的恶意软件增量检测方法...

    基于改进SOINN算法的恶意软件增量检测方法 张斌1,2, 李立勋1,2, 董书琴1,2 1 信息工程大学,河南 郑州 450001 2 河南省信息安全重点实验室,河南 郑州 450001 摘要:针对 ...

最新文章

  1. easyui datagrid
  2. Symfony2插件StofDoctrineExtensionsBundle的使用说明
  3. es7 async 前置依赖
  4. 用户激励体系搭建指南
  5. c# 中对于每次修改的程序 都必须重新手动生成 才能编译的问题
  6. linux下的C语言开发(网络编程)
  7. python手机壁纸超清_【原创】Python必应超清壁纸爬虫
  8. C++ 字节序测试代码
  9. graphql java中文文档_GraphQL学习指南 PDF 下载
  10. 两次救场、两度弃子:被嫌弃的盛大游戏的一生
  11. 多开 android模拟器,安卓模拟器如何多开窗口保证游戏不封号
  12. 机器学习基础知识之概率论基础详解
  13. 租用服务器怎么修改密码,把租的号改密码-租用的服务器怎么改密码?
  14. 如何恢复录音删除的录音文件_手机通话录音后!点击这个按钮,就能将录音文件一键转为文字...
  15. 服务器遇到大流量攻击的处理过程
  16. 鸿蒙系统乐视手机,首款骁龙870平板官宣;鸿蒙os支持第三方手机;乐视手机高调复活...
  17. PostgreSQL基础(概念篇)
  18. Android 模仿flabby bird游戏开发
  19. 中国首架共享专机在海南首飞;十家企业入选中国最佳健康雇主 | 美通企业日报...
  20. PHP过滤器之审查过滤器(Sanitize filters)

热门文章

  1. 苹果id账号密码忘记了怎么办?分享官方教程,快速重置!
  2. (石头、剪刀、布)shell脚本,随机对比,case的应用
  3. 通过EFI安装Ubantu+Win7双系统教程
  4. ALSA子系统(五)------XRUN排查
  5. 2018总结以及2019展望
  6. 开源的多媒体播放器MPV
  7. CSU 1506 酷酷的单词
  8. 日期控件--WdatePicker的使用小技能
  9. Codeforces Round #514 (Div. 2)
  10. 小爬虫爬取小猫咪图片并存入本地文件夹