我们日常使用 NFC 卡可以用来刷地铁,进出门禁,但是你有没有想过,

当我们使用一个 NFC 的 IC 卡刷卡进入地铁的时候,此时系统是如何知道我这个卡上有多少充值余额的?

这个薄薄的 NFC 卡到底有什么魔力,除了可以刷卡进地铁,还可以去银行取钱,进出小区门禁。

今天我在看到一些物联网的知识时,在发现原来这中间的技术原理原来是这么回事

原理

目前我们常见的NFC智能IC卡上,实际是运行着 JavaCard 虚拟机,NFC智能 IC 卡上可以运行由精简后的 Java 语言编写的卡应用(简称 Applet)。

NFC智能 IC 卡的 Applet 不能自己启动,必须由外部终端(例如 POS 机,地铁刷卡终端等)向卡片发送 Select 命令,由此选中卡片中的 Applet,Applet 才能运行。

那么我们基于 Java API,实现了一套JavaCard applet小程序后,如何将该小程序运行在 NFC 上呢。

1、使用智能卡读卡器连接到计算机,并确保读卡器能够识别NFC智能卡。

2、通过个人化工具选择卡上的卡管理应用(通常是Global Platform卡管理应用)。

3、使用个人化工具将CAP文件安装到智能卡上。(我们 Applet 程序打包后是一个 CAP 文件)

此时这个 NFC 卡上就运行着一个小程序了。

但问题又来了。既然这个 NFC 上一直运行着 Java 虚拟机,难道这个 NFC 不需要耗费电源吗?

没有电源,这个 NFC 小程序如何运行?

答案是:还真不用外接电源,通常 NFC 会使用无线感应供电。

NFC智能卡通过无线感应方式从NFC读卡器或NFC设备获取电力。当NFC卡片靠近读卡器时,读卡器产生的交变磁场会在卡片内部的线圈中感应出电流,这个过程称为电磁感应。因此,NFC卡片不需要内置电池,它们通过这种方式获得所需的电力来运行。

真的是太6啦!

我们常用的地铁卡/银行卡,竟然运行着一个 Java 虚拟机的更多相关文章

  1. 编译运行第一个Java程序——通过示例学习Java编程3

    作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=13 在本教程中,我们将了解如何编写.编译和运行Ja ...

  2. 【Java】使用记事本运行第一个Java程序

    要编写java程序,java sdk必不可少,mac OS系统自带sdk,如果觉得版本太低,可以去官网下载最新的. 打开终端,新建一个HelloWorld.java文件: vim HelloWorld ...

  3. 【菜鸟入门】安装配置eclipse 并编写运行第一个Java程序

    不得不吐槽一下,安装配置这eclipse真是太费劲了...下面总结一下,以便下次再安装 本人 win10系统,64位机 一.在官网下载eclipse安装包 文件名:eclipse-inst-win64 ...

  4. Java虚拟机及运行时数据区

    1.Java虚拟机的定义 Java虚拟机(Java Virtual Machine),简称JVM.当我们说起Java虚拟机时,可能指的是如下三种不同的东西: 抽象的虚拟机规范 规范的具体实现 一个运行 ...

  5. [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义

    前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine  ,既然是虚拟机, ...

  6. Java虚拟机(一)结构原理与运行时数据区域

    我们来学习Java虚拟机的结构原理与运行时数据区域. 1.Java虚拟机概述 Oracle官方定义的Java技术体系主要包括以下几个部分: Java程序设计语言 各种平台的Java虚拟机 Class文 ...

  7. Java虚拟机 - 结构原理与运行时数据区域

    http://liuwangshu.cn/java/jvm/1-runtime-data-area.html 前言 本来计划要写Android内存优化的,觉得有必要在此之前介绍一下Java虚拟机的相关 ...

  8. Java虚拟机详解(二)------运行时内存结构

    首先通过一张图了解 Java程序的执行流程: 我们编写好的Java源代码程序,通过Java编译器javac编译成Java虚拟机识别的class文件(字节码文件),然后由 JVM 中的类加载器加载编译生 ...

  9. JVM学习(一)Java虚拟机运行时数据区域

    一.Java内存区域 1.运行时数据区域 根据<Java 虚拟机规范(Java SE 7 版)>规定,Java 虚拟机所管理的内存包括以下几个运行时数据区域: 1.1 程序计数器 程序计数 ...

  10. 用C#绘图实现动画出现卡屏(运行慢)问题的解决办法

    原文:用C#绘图实现动画出现卡屏(运行慢)问题的解决办法 正在用C#做一个小游戏,需要用到动画,上次解决的问题是闪烁问题,用双缓冲技术.以为不会有什么问题了.后来当把图片全部绘制上去的时候依然出现了卡 ...

随机推荐

  1. python中globals()的用法

    python中globals()的用法 1. 获取所有的全局变量, 获取到的内容如下: {'__name__': '__main__', '__doc__': None, '__package__': ...

  2. 如何在Android 确定 lunch对应的内核配置

    如何在Android 确定 lunch对应的内核配置 背景 因为在调试中发现,user版本出现了一个userdebug版本上没有的bug.为了对比安卓 user版本与userdebug版本的差异,涉及 ...

  3. ARM Cortex-A系列处理器性能分类比较

    在如今这个电子产品泛滥的年代,仅仅靠品牌或是外观已经不足以辨别产品的优劣,其内置的处理器自然也就成为了分辨产品是否高端的标准之一.那么我们今天就不妨好好了解一下近几年来电子产品中较为主流的RAM处理器 ...

  4. lumen、laravel 环境问题汇总

    框架报500 1.chmod 777 -R storage 将日志目录权限设置下. 2.修改fastcgi,将代码目录包含进去. fastcgi_param PHP_ADMIN_VALUE " ...

  5. LaravelLumen 分组求和问题 where groupBy sum

    在Laravel中使用分组求和,如果直接使用Laravel各数据库操作方法,应该会得出来如下代码式: DB::table('table_a') ->where('a','=',1) ->g ...

  6. 卷积神经网络中nn.Conv2d()和nn.MaxPool2d()以及卷积神经网络实现minist数据集分类

    卷积神经网络中nn.Conv2d()和nn.MaxPool2d() 卷积神经网络之Pythorch实现: nn.Conv2d()就是PyTorch中的卷积模块 参数列表 参数 作用 in_channe ...

  7. Servlet3.0+SpringBoot2.X注解Listener常用监听器

    监听器:应用启动监听器,会话监听器,请求监听器 作用: ServletContextListener 应用启动监听 HttpSessionLisener 会话监听 ServletRequestList ...

  8. SpringSecurity安全管理

    SpringSecurity安全管理 一.安全简介 在 Web 开发中,安全一直是非常重要的一个方面,因此从应用开发的第一天就应该把安全相关的因素考虑进来,并在整个应用的开发过程中. 主要安全框架:S ...

  9. 洛谷P1020

    又是一道做的很麻的题,准确来说感觉这不是一道很好的dfs题,没有体现dfs的一些特点 反而感觉是在考察dp,刚开始也是按照我的思路交了3次都没过 原本以为所选的数应该都是由上一次的最大值推出来的,后面 ...

  10. 2024秋招字节跳动朝夕光年UE4客户端开发实习生岗笔试题目

    20240117更新 2024年秋招笔试题目,没想到时隔几个月字节跳动游戏业务就要寄了,本文仅供参考,请大佬多多指教 Q1字符串处理 Q2 杯子问题 桌子上有4109+1个饮料杯,这些饮料杯的编号依次 ...