try

基于usb4java实现的java下的usb通信

不羁岁月 提交于 2020-03-08 08:03:21
项目地址: 点击打开 使用java开发的好处就是跨平台,基本上java的开发的程序在linux、mac、MS上都可以运行,对应这java的那句经典名言:一次编写,到处运行。这个项目里面有两种包选择,一个是low-level(libus)一个是high-level(javax-usb),相关的优缺点在官方网站上已经说明了,我这里就不翻译了,不过前者好像基于libusb已经好久不更新了,所以还是选择后者。 配置 :你需要在你包的根目录下新建一个名为: javax.usb.properties 的文件,里面的内容是这样的: javax.usb.services = org.usb4java.javax.Services 查找usb设备,其实通过usb通信流程大体上都是一致,之前我做过android与arduino通过usb通信,然后java通信走了一遍之后发现是一样的。 USB 设备 在 一 棵树上 进行 管理 。 这 树 的 根 是 所有 物理 根 集线器 连接 到 一个 虚拟 的 USB 集线器 。 更多 的 集线器 可以 连接 到 这些 根 集线器 和 任何 集线器 可以 有 大量 的 连接 的 USB 设备 。 通常 , 您 需要 在 使用 它 之前 搜索 特定 设备,下面的 是 一个 例子 如何 扫描 与 一个 特定 的 供应商 和 产品 id 的 第一个 设备 的 设备:

C++---异常处理

有些话、适合烂在心里 提交于 2020-03-08 04:27:57
什么是异常 异常是一种处理错误的方式。 例如:一个函数发现自己无法处理的错误时就可以抛出异常,让别的函数直接或间接的调用处理这个错误。 throw:出现问题时,程序会抛出一个异常。 try:尝试破获异常。 catch:异常的处理方法。 通常将有可能出现异常的代码放在try{}程序块中,将异常处理的语句放在catch{}程序块中,但是捕获与处理的条件是,抛出的异常的类型与catch块参数的类型匹配。 注意 并不是使用了try来包含可能出现异常的代码后,程序就不会崩溃,通常需要(1)满足某个条件时显示抛出异常(2)使用catch来匹配抛出异常类型。 try { //保护的代码 } catch ( 类型名 [ 参数名 ] ) { //异常处理的代码I } catch ( 类型名 [ 参数名 ] ) { //异常处理的代码II } int Func2 ( ) { throw "Error" ; //尝试抛出异常 } void Func1 ( ) { cout << Func2 ( ) << endl ; } int main ( ) { try { Func1 ( ) ; //尝试捕获异常 } catch ( const char * errmsg ) //异常处理函数 { cout << "Exception cannot be destroyed" << endl ; } system

java自旋锁的代码实现

大兔子大兔子 提交于 2020-03-07 20:49:32
自旋锁:spinlock 是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环好用CPU 代码: import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; public class SpinLockDemo { //原子引用线程 AtomicReference<Thread> atomicReference = new AtomicReference<>(); public void myLock() { Thread thread = Thread.currentThread(); System.out.println(Thread.currentThread().getName() + "\t come in "); while (!atomicReference.compareAndSet(null, thread)) { } } public void myUnlock() { Thread thread = Thread.currentThread(); atomicReference.compareAndSet(thread, null); System.out.println(Thread

ajax

社会主义新天地 提交于 2020-03-07 19:13:00
**今天,我就带你来了解一下ajax吧!** 首先我们得明白什么是ajax?那到底什么才是ajax呢? AJAX = “Asynchronous Javascript And XML”(==异步 JavaScript 和 XML==) 直译出来就是异步的 JavaScript和数据传输技术 。国内常翻译为**==“ 阿贾克斯 ”==**是指一种无需重新加载整个网页的情况下,能够更新部分网页的技术。直白的说,ajax就是js通过一个网址去加载数据。用户是看不见的,可以通过浏览器控制台中的网络查看。 上面说到,xml,我们就结合json来给你介绍~~~ ==xml(可扩展标记语言)、json(轻量级数据格式)都是字符串的格式,都用于数据传输== 两者之间有什么区别呢? **xml:** 优点: 1、传输的数据种类特别丰富 2、传输的数据量非常大 缺点: 解析起来比较麻烦 【注】用于大型门户网站,今日头条、腾讯新闻、网易新闻。 **json:** 优点: 1、解析起来非常方便 2、适合轻量级的数据 缺点: 1、种类比较少 【注】基本上90%以上应用用的都是json格式字符串传输。 同时说到异步,有的小伙伴就懵逼了,心想异步是啥,有什么作用呢? 了解异步之前,我们首先看看javas中的同步是什么吧! ==同步== : 阻塞,当前程序必须等前面的程序执行完毕以后,才能运行 。 举个例子

【校园商铺 4章】:店铺注册--Controller层的实现及各层(改造)

a 夏天 提交于 2020-03-07 03:24:01
先前的代码可能会实现不了,现在改造,最后实现结果了 文章目录 1. Controller层的实现 1.1 封装 HttpServletRequestUtil 1.2 Controller层实现 2.改造代码 2.1 改造Controller层 2.2 改造ShopService接口 2.3 改造ShopServiceImpl实现类 2.4 改造ImageUtil工具类 2.5 改造ShopServiceTest测试类 1. Controller层的实现 1.1 封装 HttpServletRequestUtil package com . imooc . o2o . util ; import javax . servlet . http . HttpServletRequest ; public class HttpServletRequestUtil { //转换成整型 public static int getInt ( HttpServletRequest request , String key ) { try { //将key对应的参数值转换成整型 return Integer . decode ( request . getParameter ( key ) ) ; } catch ( Exception e ) { return - 1 ; } } //转换成长整型

数字证书简介及Java编码实现

旧时模样 提交于 2020-03-07 02:22:06
数字签名原理简介(附数字证书) 首先要了解什么叫对称加密和非对称加密,消息摘要这些知识。 1. 非对称加密 在通信双方,如果使用非对称加密,一般遵从这样的原则:公钥加密,私钥解密。同时,一般一个密钥加密,另一个密钥就可以解密。 因为公钥是公开的,如果用来解密,那么就很容易被不必要的人解密消息。因此, 私钥也可以认为是个人身份的证明。 如果通信双方需要互发消息,那么应该建立两套非对称加密的机制(即两对公私钥密钥对),发消息的一方使用对方的公钥进行加密,接收消息的一方使用自己的私钥解密。 2.消息摘要 消息摘要可以将消息哈希转换成一个固定长度的值唯一的字符串。值唯一的意思是不同的消息转换的摘要是不同的,并且能够确保唯一。 该过程不可逆 ,即不能通过摘要反推明文(似乎SHA1已经可以被破解了,SHA2还没有。一般认为不可破解,或者破解需要耗费太多时间,性价比低)。 利用这一特性, 可以验证消息的完整性。 消息摘要通常用在数字签名中,下面介绍用法。 了解基础知识之后,就可以看一下数字签名和数字证书了。 3.数字签名 假设现在有通信双方A和B,两者之间使用两套非对称加密机制。 现在A向B发消息。 那么,如果在发送过程中,有人修改了里面密文消息,B拿到的密文,解密之后得到明文,并非A所发送的,信息不正确。 要解决两个问题:1. A的身份认证 2. A发送的消息完整性

Java自学-多线程 Lock对象

♀尐吖头ヾ 提交于 2020-03-06 21:57:27
多线程 Lock对象 与synchronized类似的,lock也能够达到同步的效果 步骤 1 : 回忆 synchronized 同步的方式 首先回忆一下 synchronized 同步对象的方式 当一个线程占用 synchronized 同步对象,其他线程就不能占用了,直到释放这个同步对象为止 package multiplethread; import java.text.SimpleDateFormat; import java.util.Date; public class TestThread { public static String now(){ return new SimpleDateFormat("HH:mm:ss").format(new Date()); } public static void main(String[] args) { final Object someObject = new Object(); Thread t1 = new Thread(){ public void run(){ try { System.out.println( now()+" t1 线程已经运行"); System.out.println( now()+this.getName()+ " 试图占有对象:someObject"); synchronized

Java8新特性

倖福魔咒の 提交于 2020-03-06 19:02:27
1、CompletableFuture: 基本的方式创建CompletableFuture<T>对象 package future ; import java.util.Optional ; import java.util.Random ; import java.util.concurrent.CompletableFuture ; public class CompletableAction { private static Random random = new Random() ; public static void main (String[] args) { CompletableFuture<Double> completableFuture = new CompletableFuture<>() ; new Thread(() -> { Double i = get () ; completableFuture .complete(i) ; }).start() ; // 使用 get 方法,会进入阻塞,因此必须等到输出随机数,再输出 123123 /*try { Optional.ofNullable(completableFuture.get()).ifPresent(System.out::println); System.out.println(

JDK并发包

北城以北 提交于 2020-03-06 10:30:21
1.重入锁(ReentrantLock) 重入锁使用java.util.concurrent.locks.ReentrantLock类来实现,具有与synchronized关键字相似的功能。 1 package com.company; 2 3 import java.util.concurrent.locks.ReentrantLock; 4 5 public class User implements Runnable { 6 private ReentrantLock lock = new ReentrantLock(); 7 static int i = 0; 8 @Override 9 public void run() { 10 lock.lock(); 11 for (int j = 0; j < 10000000; j++) { 12 i++; 13 } 14 System.out.println(i); 15 lock.unlock(); 16 } 17 18 public static void main(String[] args) throws InterruptedException { 19 //注意要使用同一个对象创建线程 20 User u = new User(); 21 Thread t1 = new Thread(u); 22 Thread

用C#获取硬盘序列号,CPU序列号,网卡MAC地址

吃可爱长大的小学妹 提交于 2020-03-06 07:43:48
这个问题首先得考虑的就是你的硬盘是不是SCSI硬盘 如果是,那么根本不存在"物理序列号",只可能取得卷标的序列号 如果是卷标序列号,要注意的是每次格式化硬盘的时候这个序列号都会变 代码可以参考: http://www.csdn.net/Develop/Read_Article.asp?Id=25196 如果是物理序列号: String HDid; ManagementClass cimobject = new ManagementClass("Win32_DiskDrive"); ManagementObjectCollection moc = cimobject.GetInstances(); foreach(ManagementObject mo in moc) { HDid = (string)mo.Properties["Model"].Value; MessageBox.Show(HDid ); } 如果是取得逻辑序列号(Format产生的那个),用WMI就可以,在引用中,添加system.mangement以后。 using System.Management; ..... ManagementObject m_objDisk = new ManagementObject( "win32_logicaldisk.deviceid=\"c\""); string