在 Java 应用程序中访问 USB 设备

合集下载

Java在后台获取USB二维码扫描枪扫描的内容

Java在后台获取USB二维码扫描枪扫描的内容

Java在后台获取USB⼆维码扫描枪扫描的内容项⽬需要在Web项⽬中获取扫描枪扫描的内容,项⽬是Java Web项⽬,最后部署在Linux系统中的。

拿到扫描枪后,连接在⾃⼰的Windows系统上试了下,插上后,不需要装任何驱动,只要有个⽂本框,就能将扫描到的内容输⼊到⽂本框⾥。

反复测试后发现,当前窗⼝的焦点在哪⾥,扫描到的内容就显⽰在哪⾥。

那么现在遇到⼀个问题,项⽬以后要跑起来,是没有任何窗⼝的,是运⾏在后台的,那怎么拿到扫描枪输⼊的内容呢?先按照盒⼦上的⼚家名称找到官⽹,在官⽹上查到了技术⽀持电话,结果⼈家说⼈家也不知道,他只是硬件层⾯的技术⽀持,如何⽤编程语⾔拿到扫描到的东西,他不清楚。

但是他说他们还有串⼝类型的扫描枪,可⽀持软件编程。

挂完电话看了下我们的⼯控机,是没有串⼝的,只有USB接⼝。

但是⽹上搜了⼀下,有⽤Java扫描系统的串⼝,然后根据串⼝号获得串⼝输⼊进来的东西,应该不难。

既然我们没有串⼝,我也没深⼊研究。

然后就以Java 扫描枪为关键字搜索相关资料,以前还真有⼈做过这个,在开源中国找到⼀个前辈做的项⽬,是⼀个条形码扫描枪,⼈家实现了。

代码那过来研究了⼀番,⼤致明⽩了。

扫描仪其实说⽩了对电脑来说就是个键盘,扫描枪将扫描得到的内容解析,然后模拟键盘,⼀个⼀个敲⼊到电脑中,最后按⼀下回车键!怪不得焦点在哪个窗⼝就输⼊到哪个窗⼝呢。

那就⼜遇到⼀个问题,Java代码运⾏在Jvm虚拟机内,扫描枪或键盘输⼊的东西,只有操作系统知道,Jvm虚拟机如何知道呢?那就是JNI编程,通过写C/C++代码,监听操作系统的的输⼊流,然后通过JNI调⽤。

虽然我不会JNI,也不会C/C++,但幸运的是,SUN公司已经实现了这个代码,弄出⼀个叫JNA的东西(Java Native Access),给Java提供了访问操作系统键盘⿏标的能⼒。

然后将⼈家的代码完整拷贝,想跑⼀下,结果没jar包,⼀直报错,根据包名百度,在maven仓库中找相关jar包,(想找官⽅的jar包和⼀些⽂档,⽆奈,因为被收购的原因,有些链接已经挂了,找不到哇)找到⼏个,放进去,编译不报错了,运⾏⼀直报错,换了好⼏个jar包,还是不⾏,真是可郁闷了。

javabus进入方法

javabus进入方法

javabus进入方法(原创版4篇)目录(篇1)1.背景介绍:JavaBus 的发展与应用2.JavaBus 的概念与特点3.JavaBus 的进入方法4.JavaBus 的优势与未来发展正文(篇1)随着信息技术的飞速发展,Java 编程语言以其卓越的性能和跨平台特性,在众多编程语言中脱颖而出。

JavaBus,作为 Java 编程语言的一个重要组成部分,为广大开发者提供了便利的编程接口,使得各种应用程序之间能够实现高效、稳定的数据传输。

本文将详细介绍 JavaBus 的进入方法,并展望其优势与未来发展。

一、JavaBus 的概念与特点JavaBus,全称 JavaBus Architecture,是 Java 编程语言中用于实现分布式对象技术(CORBA)的一种架构。

JavaBus 通过提供一组标准的API(应用程序编程接口),使得 Java 对象能够在不同的网络环境中进行通信。

其主要特点如下:1.面向对象:JavaBus 完全支持 Java 语言的面向对象特性,如封装、继承和多态等,方便开发者构建复杂的业务逻辑。

2.分布式:JavaBus 支持跨平台、跨网络的通信,使得应用程序能够实现真正的分布式处理。

3.可靠性:JavaBus 提供了一套完整的错误处理机制,确保通信过程中的数据安全与完整性。

二、JavaBus 的进入方法要进入 JavaBus,需要了解以下几个方面的知识:1.JavaBus API:JavaBus API 是 JavaBus 的核心,提供了各种用于实现对象通信的方法和接口。

开发者需要熟悉这些 API,以便在程序中实现 JavaBus 功能。

2.IDL(接口定义语言):IDL 是一种用于描述接口的文本语言。

开发者需要使用 IDL 定义通信接口,以便在不同的语言和平台之间实现数据交换。

3.编译与部署:编写好 JavaBus 程序后,需要使用相应的编译工具将其编译为二进制文件,并在目标环境中部署,以便实现通信功能。

在Java应用程序中访问USB设备

在Java应用程序中访问USB设备

在本文通过提供使Java 应用程序可以使用USB 设备的API 而使这个过程变得更容易。

Java 平台一直都以其平台无关性自豪。

虽然这种无关性有许多好处,但是它也使得编写与硬件交互的Java 应用程序的过程变得相当复杂。

在本文中,研究科学家蒋清野讨论了两个项目,它们通过提供使Java 应用程序可以使用USB 设备的API 而使这个过程变得更容易。

虽然这两个项目仍然处于萌芽状态,但是它们都显示了良好的前景,并已经成为一些实用应用程序的基础。

通用串行总线(Universal Serial Bus USB)规范的第一个版本发表于1996年1月。

因为它的低成本、高数据传输率、使用容易和灵活性,USB 在计算机行业里获得了广泛接受。

今天,许多周边设备和装置都是通过USB 接口连接到计算机上的。

目前,大多数一般用途的操作系统都提供了对USB 设备的支持,并且用 C 或者C++ 可以相对容易地开发访问这些外设的应用程序。

不过,Java 编程语言在设计上对硬件访问提供的支持很少,所以编写与USB 设备交互的应用程序是相当困难的。

IBM 的Dan Streetman 最早开始了在Java 语言中提供对USB 设备的访问的努力。

2001年,他的项目通过Java 规范请求(Java Specification Request,JSR)过程被接受为Java 语言的候选扩展标准。

这个项目现在称为JSR-80 并且指定了官方包b。

同时,在2000年6月,Mojo Jojo 和David Brownell 在SourceForge 开始了jUSB 项目。

这两个项目都开发出了Linux 开发人员可以使用的包,尽管它们都还很不完善。

这两个项目也都开始试图向其他操作系统上的Java 应用程序提供对USB 设备的访问,尽管它们都还没有开发出可以使用的包(参阅参考资料中有关本文中讨论的这两个项目及其他项目的资料)。

在本文中,将对jUSB 和JSR-80 项目作一个简要介绍,不过,我们首先要看一下USB 协议的具体细节,这样您就可以理解这两个项目是如何与USB 设备交互的。

java libusb 案例

java libusb 案例

java libusb 案例(原创实用版)目录1.Java libusb 简介2.Java libusb 的使用案例3.Java libusb 的优势和局限性正文【1.Java libusb 简介】Java libusb 是一个 Java 语言的 USB 设备访问库,它提供了一组Java 类,以方便 Java 开发人员访问和控制 USB 设备。

Java libusb 支持各种类型的 USB 设备,包括鼠标、键盘、打印机、扫描仪、游戏手柄等。

通过使用 Java libusb,开发人员可以在 Java 应用程序中方便地进行 USB 设备访问和控制。

【2.Java libusb 的使用案例】Java libusb 的使用案例非常广泛,下面以一个简单的例子来说明如何使用 Java libusb 访问 USB 设备。

假设我们要访问一个 USB 鼠标,首先需要导入 Java libusb 的相关类:```javaimport BDevice;import BDeviceConnection;import BManager;import b4j.device.DeviceDescriptor;import b4j.device.InputDevice;import b4j.device.OutputDevice;import bDriver;import b4j.event.Event;import b4j.event.EventListener;import java.nio.ByteBuffer;import java.util.HashMap;import java.util.Map;```接下来,我们可以编写一个主程序来扫描 USB 设备并连接到目标设备:```javapublic class UsbMouseExample {public static void main(String[] args) {// 获取 USB 管理器USBManager usbManager = USBManager.getInstance();// 扫描 USB 设备Map<String, UsbDevice> deviceList =usbManager.getDeviceList();// 遍历 USB 设备列表,查找目标设备for (UsbDevice device : deviceList.values()) {if (device.getDeviceClass() == 3) { // 鼠标的设备类为 3System.out.println("找到 USB 鼠标设备:" +device.getDeviceName());break;}}// 连接到目标设备UsbDevice device =deviceList.get(device.getDeviceName());UsbDeviceConnection connection =UsbManager.getInstance().openDevice(device);// 获取设备描述符DeviceDescriptor deviceDescriptor =device.getDeviceDescriptor();System.out.println("USB 鼠标设备描述符:" + deviceDescriptor);// 获取输入设备InputDevice inputDevice = newInputDevice(connection);// 获取输出设备OutputDevice outputDevice = newOutputDevice(connection);// 注册事件监听器connection.addEventListener(new EventListener() { @Overridepublic void onEvent(Event event) {System.out.println("USB 鼠标事件:" + event);}});// 循环读取 USB 鼠标输入数据while (true) {int bytesRead =inputDevice.read(ByteBuffer.allocate(64));if (bytesRead > 0) {System.out.println("读取到 USB 鼠标输入数据:" + new String(ByteBuffer.wrap(inputDevice.getBuffer())));}}}}```运行这个程序,就可以看到 USB 鼠标的设备描述符和输入数据。

JAVA开发U KEY使用说明

JAVA开发U KEY使用说明

USB-Key使用手册
1.安装USB-Key驱动
USB-Key驱动文件有win7、win8两种驱动可供使用,驱动程序见文件夹。

2.安装完成。

B-Key登陆VPN
插入USB-Key,程序默认为您的电脑安装我院颁发的证书,请点击“是”。

看到弹出USB-Key已插入这个界面说明已经可以使用USB-Key登录我院VPN了。

B-Key管理工具的使用
当您安装完驱动后会在你的程序菜单栏里存在Entersafe文件夹,单击出现epass3003管理工具,如下图:
登陆epass3003管理工具,点击相应选项修改PIN码(强烈建议修改PIN码,初始PIN码为1234)、用户名(无需点击登录,若不小心点击登录后不要对证书内容进行导入导出等操作直接登出即可,登录后的误操作会导致您的USB-Key 失效)。

B-Key管理工具的使用
登陆epass3003配置工具,设置插入USB-Key后的默认访问网址(我院VPN 的登录地址:https://)具体操作见下图红色框内,其他选项切勿随意更改,设置完成后只需插入Key就可弹出VPN页面。

6.登陆VPN
以上步骤完成就可以使用USB-Key只需输入PIN码就能访问院内网络资源了,见下图。

java libusb 案例

java libusb 案例

java libusb 案例摘要:1.Java LibUSB 简介2.Java LibUSB 开发环境搭建3.Java LibUSB 案例:USB 设备通信4.Java LibUSB 案例:USB 设备控制5.Java LibUSB 在实际项目中的应用与前景正文:Java LibUSB 是一款基于Java 语言的USB 设备开发库,它允许Java 程序员通过USB 接口与硬件设备进行通信。

LibUSB 是一款跨平台的USB 设备驱动程序,通过在Java 中调用LibUSB API,开发者可以方便地实现对USB 设备的控制与数据传输。

1.Java LibUSB 简介Java LibUSB 是Java 语言中一个用于操作USB 设备的库。

它基于LibUSB 库,LibUSB 是一款开源的跨平台的USB 设备驱动程序,支持Windows、Linux 和Mac OS 等操作系统。

通过使用Java LibUSB,Java 程序员可以轻松地实现与USB 设备的通信,进行数据传输和设备控制。

2.Java LibUSB 开发环境搭建要使用Java LibUSB 进行开发,首先需要安装Java 开发环境,并配置好Java 库的路径。

然后,需要在项目中引入Java LibUSB 相关的依赖库。

在Linux 和Mac OS 系统中,可以通过包管理器(如Maven 或Gradle)来安装依赖库。

在Windows 系统中,需要下载相应的库文件并添加到项目的类路径中。

3.Java LibUSB 案例:USB 设备通信在Java LibUSB 中,可以通过USB 设备描述符(USB Device Descriptor)获取设备的信息,如设备名称、制造商、产品序列号等。

通过读写USB 设备的端点(Endpoint),可以实现数据的发送与接收。

以下是一个简单的Java LibUSB 设备通信示例:```javapublic class UsbDeviceCommunication {public static void main(String[] args) throws Exception {UsbDevice device = UsbDevice.getUsbDeviceById(0x1234, 0x5678);UsbInterface intf = device.getInterface(0);UsbEndpoint endpointIn = intf.getEndpoint(0x81);UsbEndpoint endpointOut = intf.getEndpoint(0x01);byte[] dataOut = "Hello, USB!".getBytes();endpointOut.write(dataOut);byte[] dataIn = new byte[64];int bytesRead = endpointIn.read(dataIn);System.out.println("Received data: " + new String(dataIn, 0, bytesRead));}}```4.Java LibUSB 案例:USB 设备控制除了数据通信外,Java LibUSB 还支持对USB 设备的控制。

java 串口通信案例

java 串口通信案例

java 串口通信案例Java串口通信是指使用Java编程语言实现与串口设备之间的数据通信。

串口通信在很多应用场景中都有广泛的应用,比如物联网、工业自动化、智能家居等领域。

本文将列举十个以Java串口通信为题的案例,介绍其实现方法和应用场景。

1. 串口读取数据通过Java编程语言实现串口读取数据的功能,可以使用Java的串口通信库,如RXTX、JavaComm等。

首先需要打开串口,并设置串口参数,然后通过监听串口数据的方式实时读取串口传入的数据。

这个案例适用于需要实时监控串口设备数据的应用场景,比如环境监测。

2. 串口发送数据通过Java编程语言实现串口发送数据的功能,可以使用Java的串口通信库。

首先需要打开串口,并设置串口参数,然后通过写入数据的方式将数据发送到串口设备。

这个案例适用于需要向串口设备发送指令或数据的应用场景,比如控制外部设备。

3. 串口数据解析通过Java编程语言实现串口数据解析的功能,可以将从串口读取的原始数据进行解析,提取出有用的信息。

可以根据数据格式进行解析,比如按照特定的协议解析数据。

这个案例适用于需要对串口设备传输的数据进行处理和分析的应用场景。

4. 串口数据存储通过Java编程语言实现串口数据存储的功能,可以将从串口读取的数据保存到本地文件或数据库中。

可以根据需求选择适当的存储方式,比如文本文件、二进制文件或数据库。

这个案例适用于需要对串口设备传输的数据进行长期存储和分析的应用场景。

5. 串口数据转发通过Java编程语言实现串口数据转发的功能,可以将从一个串口读取的数据转发到另一个串口。

可以实现串口设备之间的数据交互,比如串口设备之间的数据通信或设备之间的数据同步。

这个案例适用于需要多个串口设备之间进行数据交互的应用场景。

6. 串口数据监控通过Java编程语言实现串口数据监控的功能,可以监控串口设备的状态和传输数据。

可以实时显示串口设备的连接状态、波特率、数据位、停止位等信息,并实时显示串口传输的数据。

java接口对接方法与流程

java接口对接方法与流程

java接口对接方法与流程在Java开发中,接口对接是一种常见的编程方式。

通过接口对接,不同的模块或系统可以实现数据传递和交互。

下面将介绍Java接口对接的方法和流程。

1. 定义接口:首先,需要定义接口,接口是一种规范或契约,定义了与其他模块交互的方法和参数。

接口定义需明确输入和输出的数据类型和格式。

2. 实现接口:接下来,需要实现接口。

实现接口意味着实现接口中定义的方法,并按照接口规范进行编码。

实现接口的类需要重写接口中的所有方法,并根据具体的业务需求进行逻辑编写。

3. 注册及配置:完成接口的实现后,需要将实现类注册到相应的配置文件或容器中。

通常,可以使用依赖注入或配置文件方式进行注册。

4. 接口调用:一旦接口注册完成,就可以进行接口调用了。

接口调用可以是其他模块或系统向已实现接口的模块发送请求,并获取返回结果。

调用方需要了解接口的输入参数格式和输出结果的数据类型。

5. 异常处理:在接口对接过程中,可能会发生异常。

在接口调用中,可以使用异常捕获和处理机制来处理异常情况,保证系统的稳定性和可靠性。

6. 调试与测试:接口对接完成后,需要进行调试和测试,确保接口的正常工作。

可以使用单元测试或集成测试等方式进行接口测试,验证接口的功能和性能。

通过以上步骤,实现了Java接口对接的方法和流程。

接口对接是多个系统或模块之间进行数据交互的重要手段,具有良好的扩展性和灵活性。

在实际开发中,需要根据具体业务需求和系统架构来设计和实现接口对接。

请根据具体情况合理选取和应用接口对接的方法和流程。

java android串口编程实例

java android串口编程实例

java android串口编程实例在Android上进行串口编程需要使用Android的串口API,这些API允许你与串口设备进行通信。

下面是一个简单的示例,展示了如何在Android 上使用串口API进行编程。

首先,你需要在你的文件中添加以下权限:```xml<uses-permission android:name="_PORT" />```然后,你可以使用以下代码打开串口并进行读写操作:```javaimport ;import ;import ;import ;import ;import ;import ;import ;public class MainActivity extends Activity {private TextView textView;private UsbManager usbManager;private SerialPort serialPort;private InputStream inputStream;private OutputStream outputStream;Overrideprotected void onCreate(Bundle savedInstanceState) {(savedInstanceState);setContentView(_main);textView = (TextView) findViewById();usbManager = (UsbManager) getSystemService(_SERVICE);serialPort = new SerialPort("/dev/ttyUSB0", 9600, 0); // 串口路径和波特率根据实际情况修改inputStream = ();outputStream = ();} catch (IOException e) {();}}Overrideprotected void onResume() {();try {byte[] buffer = new byte[1024];int len;while ((len = (buffer)) != -1) {String data = new String(buffer, 0, len); // 将读取到的数据转换为字符串并显示在TextView上(data);}} catch (IOException e) {();}}Overrideprotected void onPause() { ();try {();();();} catch (IOException e) { ();}}}```。

基于WMI的U盘信息访问实验报告

基于WMI的U盘信息访问实验报告

基于WMI的U盘信息访问实验报告1. 实验要求本实验要求实现对U盘基本信息的访问,包括设备ID等。

2. 实验原理及过程由于目前基于Java的USB设备访问主要是基于Linux平台的,因此直接使用Java 在windows平台进行访问比较困难。

当然,目前已经有一些包可以帮助Java在windows 平台下访问USB设备口,例如:Java libusb/linusb_win32封装包。

Libusb创建与平台无关、,面向应用程序级别的、访问USB设备的类库,基于C,C++进行实现,方面通过第三方接口扩展到不同的OS上。

linusb_win32是对windows 32位操作系统的实现,该版本的类库允许windows环境下的用户无需在内核模式下编写驱动即可,它是应用程序访问USB设备的通用解决方案。

实验中采用的是基于.net平台Management类来进行USB接口的访问,System.Management类提供了丰富的对管理信息和管理事件(符合Windows Management Instrumentation基础结构的系统、设备和应用程序)的访问。

实现的具体过程:(1)查询Win32_USBControllerDevice的设备集合;(2)获取设备实体的DeviceID(3)过滤掉没有VID和PID的USB设备(4)查询特定设备的基本信息,包括设备ID(OEM序列号)、设备状态除了本实验中所使用的方法之外,还可以通过查询逻辑磁盘信息来获得U盘的一些基本逻辑信息,程序最后的注释部分是对其的实现。

3. 实验结果4. 总结通过这次试验,我对从底层访问硬件设备以及如何在.Net框架下对设备进行基本的管理有了初步了解。

参考文献[1] MSDN类库, /zh-cn/library/dwd0y33x.aspx[2]基于WMI查询USB设备, /jhqin/article/details/6734673。

java接口经典例题 读写u盘

java接口经典例题 读写u盘

java接口经典例题读写u盘问题:如何使用Java编写代码来实现读写U盘的操作回答:首先,我们需要使用Java的IO流来读写U盘。

在Java中,可以使用File类来表示文件或目录。

为了读写U盘,我们需要找到U盘的路径。

1. 查找U盘路径:我们可以使用Java的File类的listRoots()方法来获取系统中的所有根路径。

然后,我们可以遍历这些根路径,找到U盘的路径。

```javaimport java.io.File;public class USBDriveFinder {public static void main(String[] args) {File[] roots = File.listRoots();for (File root : roots) {if (isUSBDrive(root)) {System.out.println("USB Drive Found: " +root.getAbsolutePath());}}}private static boolean isUSBDrive(File drive) {// 判断是否是U盘的逻辑// 这里可以根据U盘的特征来判断,比如U盘的名称、文件系统等// 返回true表示是U盘,返回false表示不是U盘}}```2. 读取U盘文件:一旦找到U盘的路径,我们可以使用Java的FileInputStream类来读取文件内容。

可以使用BufferedInputStream类来提高读取效率。

```javaimport java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;public class USBDriveReader {public static void main(String[] args) {String usbDrivePath = "U盘路径"; // 替换为实际的U盘路径try (BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(usbDrivePath))) {byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = inputStream.read(buffer)) != -1) {// 处理读取到的数据}} catch (IOException e) {e.printStackTrace();}}}```3. 写入U盘文件:同样地,我们可以使用Java的FileOutputStream类来写入文件内容。

USB设备的Java Web应用系统设计

USB设备的Java Web应用系统设计
韩可轶 , 周德俭 , 林 雯
( 桂林工学院电子与计算机 系, 西 桂 林 5 10 ) 广 40 4 摘要 : 设计 了一个 Jv we 应 用系统 , aa b 通过服 务器对某嵌入 式设备 的 U B接 口进行数据收集、 S 处理 , 实现 了生产过程监控
的网络化。服务器端采用 J s P十J 8e l a Ba 技术, v I s 使用第三方开发包, 编写具有 UB通信功能的 J ae s S a Ba 程序 , v n 隐藏 了通
Ke od :n to i ;JP Jv y w r s e r n S ; a ̄ w kg
;U B S
I 引 吾 J

对远程客户端提供设备数据 , 给出 了一种基 = t _ F I e nr nt n ae网络化进行监控的解决方法。 e Ir t / tn
随着制造业的发展 , 单片机或微控制器( c ) M u 越
It t ne 以外u t ml / fye e l m nad ye l g J ,O soe c h c p l h N d e e o exos t dv o etn sm m sm e p s t
mane c a i l .U igti kn f eh ooy h 8r I l we oa dten tokf cinO e d vc o ew re s it mn rdc l a e a y s s ido tc nlg .te1e aea o d t d ew r u t n t eien t tok df t n h 1s l h n o h n a ted vc . h e i e
of d t ru hsre .T ess m el e h ew rig o nrln rd c o rcs .T eI vra o t J P 十 Jv S a e瞄 a a t o s e、 r h yt r i ste ntokn fc t l po u t n poes h e d p S ; h r e az o oi g i  ̄r s aa eu s t h ooy,u tetL pryd v pn i c e n lg 船 h M at edo i kt,w i sJv B aspo rm i S m nct nfn t n n ie eu ul u8 h g re a a en rga wt U Bc muiai u c o ,a dhdst sa ∞ re t h o o i h

windows与android usb串口通信原理

windows与android usb串口通信原理

windows与android usb串口通信原理USB串口通信是一种常见的通信方式,它通过USB接口来实现计算机与外部设备的通信。

在Windows操作系统和Android操作系统中,USB串口通信都是非常常用的技术。

本文将介绍Windows和Android中USB串口通信的原理。

一、Windows中的USB串口通信在Windows中,USB串口通信是通过Windows驱动程序来实现的。

Windows驱动程序包括USB控制器驱动程序和串口通信驱动程序。

USB控制器驱动程序负责管理USB接口,将USB数据传输转换为串口数据传输。

串口通信驱动程序负责与外部设备通信,将串口数据传输转换为计算机可以理解的数据格式,并将计算机的数据传输给外部设备。

在Windows中,串口通信通常使用异步通信方式,即一个线程负责发送数据,另一个线程负责接收数据。

当计算机需要与外部设备通信时,它会创建一个串口通信线程,并打开相应的串口。

串口通信线程会不断地读取外部设备的响应数据,并将其传递给应用程序。

二、Android中的USB串口通信在Android中,USB串口通信的实现方式与Windows有所不同。

在Android 中,USB串口通信是通过Android驱动程序和Android操作系统来实现的。

Android驱动程序包括USB控制器驱动程序和串口通信驱动程序。

Android中的串口通信通常使用同步通信方式,即应用程序和外部设备之间直接进行通信,不需要通过其他线程或进程。

当应用程序需要与外部设备通信时,它会打开相应的串口,并直接与外部设备进行数据传输。

在Android中,USB串口通信的实现需要使用Android USB开发框架。

开发者可以使用Java语言编写应用程序,并通过Android USB开发框架来访问外部设备的数据接口。

开发者需要了解Android USB开发框架中的相关API和数据格式,以便正确地与外部设备进行通信。

java 调用第三方接口传递数据的方法

java 调用第三方接口传递数据的方法

标题:Java调用第三方接口传递数据的方法一、背景介绍在当今信息技术高速发展的时代,各类软件系统都需要与外部系统进行数据交换,实现各种业务功能。

而Java作为一种广泛应用于企业级应用开发的编程语言,也经常需要调用第三方接口传递数据。

本文将介绍如何使用Java来调用第三方接口传递数据的方法。

二、选择合适的第三方接口1. 了解第三方接口的功能和需求在选择要调用的第三方接口时,首先要仔细了解该接口的功能和需求。

确定接口所提供的服务是否符合自己的业务需求,以及接口文档和使用方式是否符合自己的开发技术栈和能力。

2. 评估接口的稳定性和安全性在选择第三方接口时,还需要评估接口的稳定性和安全性。

了解该接口的服务质量和可靠性如何,以及接口提供商的信誉和实力是否可靠。

同时还需要了解接口的安全性措施,确保数据传输过程中的安全性。

三、使用Java调用第三方接口传递数据1. 选择合适的Java HTTP客户端库在Java中调用第三方接口,一般会使用HTTP协议进行数据传输。

为了方便地与第三方系统进行HTTP通信,可选择合适的Java HTTP客户端库,例如Apache HttpClient、OKHttp等。

2. 构建HTTP请求参数和请求头在调用第三方接口前,需要构建HTTP请求参数和请求头。

根据接口文档和要传递的数据,构建相应的请求参数,并设置请求头信息,包括认证信息、数据格式等。

3. 发起HTTP请求并处理响应通过选择的Java HTTP客户端库,可发起HTTP请求,并获取到第三方接口的响应数据。

接收到响应后,需要对响应进行合理处理,包括解析响应数据、处理异常情况等。

四、处理数据传输中的异常情况1. 超时和网络异常处理在数据传输过程中,常常会遇到网络超时、连接异常等情况。

为了保证系统的稳定性和安全性,需要针对这些异常情况进行合理的处理,例如设置合理的超时时间、进行网络重试等。

2. 处理第三方接口的异常响应在调用第三方接口时,往往会收到接口返回的异常响应。

使用Java进行移动设备管理与控制

使用Java进行移动设备管理与控制

使用Java进行移动设备管理与控制移动设备的广泛普及,使得对于移动设备的管理与控制变得愈发重要。

而Java作为一种强大而灵活的编程语言,为我们提供了许多便利的工具和库,可以帮助我们实现移动设备的管理与控制。

本文将介绍如何使用Java进行移动设备的管理与控制。

一、移动设备管理移动设备管理是指通过软件或者网络来对移动设备进行统一管理和控制的过程。

在Java中,我们可以使用各种工具和库来实现不同方面的设备管理。

下面将分别介绍几个常用的场景。

1.1 设备信息获取使用Java可以方便地获取移动设备的各种信息,比如设备型号、操作系统版本、电池状态等。

通过Java提供的API,我们可以轻松地访问这些信息并进行处理。

例如,可以使用Android提供的API获取Android设备的一些基本信息。

1.2 应用程序管理通过Java,我们可以实现移动设备上应用程序的安装、卸载、启动等操作。

通过调用系统提供的API,我们可以实现对应用程序的管理。

例如,可以使用Java调用Android提供的PackageManager类来安装、卸载和启动应用程序。

1.3 数据备份与恢复使用Java可以实现对移动设备上的数据进行备份与恢复。

通过Java 的文件处理能力,我们可以将设备上的数据进行备份,并在需要时将备份数据进行恢复。

例如,可以使用Java的IO类库来实现对设备上文件的读写操作,从而实现数据备份与恢复的功能。

二、移动设备控制移动设备控制是指通过软件或者网络来对移动设备的各种功能进行控制的过程。

Java提供了各种工具和库来实现移动设备的控制,以下是几个常见的场景。

2.1 远程控制使用Java可以实现对移动设备的远程控制。

通过网络通信协议,我们可以远程控制设备的屏幕、按键等操作。

例如,可以使用Java提供的Socket类库,通过TCP/IP协议与设备建立连接,从而实现对设备的远程控制。

2.2 设备锁定与解锁通过Java,我们可以实现对移动设备的锁定和解锁操作。

java开发U-Key使用说明

java开发U-Key使用说明

java开发U-Key使用说明
USB-Key使用手册
1.安装USB-Key驱动
USB-Key驱动文件有win7、win8两种驱动可供使用,驱动程序见文件夹。

2.安装完成。

3. USB-Key登陆VPN
插入USB-Key,程序默认为您的电脑安装我院颁发的证书,请点击“是”。

看到弹出USB-Key已插入这个界面说明已经可以使用USB-Key 登录我院VPN了。

4. USB-Key管理工具的使用
当您安装完驱动后会在你的程序菜单栏里存在Entersafe文件夹,单击出现epass3003管理工具,如下图:
登陆epass3003管理工具, 点击相应选项修改PIN码(强烈建议修改PIN码,初始PIN码为1234)、用户名(无需点击登录,若不小心点击登录后不要对证书内容进行导入导出等操作直接登出即可,登录后的误操作会导致您的USB-Key 失效)。

5. USB-Key管理工具的使用
登陆epass3003配置工具,设置插入USB-Key后的默认访问网址(我院VPN 的登录地址:https://)具体操作见下图红色框内,其他选项切勿随意更改,设置完成后只需插入Key就可弹出VPN页面。

6. 登陆VPN
以上步骤完成就可以使用USB-Key只需输入PIN码就能访问院内网络资源了,见下图。

基于usb4java的dataeventoccurred方法

基于usb4java的dataeventoccurred方法

基于usb4java的dataeventoccurred方法如何使用usb4java库中的DataEventOccurred方法进行数据事件处理[引言]USB(Universal Serial Bus)是一种常用的计算机外部设备连接标准,可用于连接各种外部设备,如打印机、摄像头和移动存储设备等。

而usb4java 是一个开源的Java库,提供了与USB设备进行通信的功能。

其中,DataEventOccurred方法是usb4java库中的一个重要方法,用于处理USB设备发送或接收数据的事件。

本文将详细介绍如何使用DataEventOccurred方法进行数据事件处理。

[第一步:导入usb4java库]在使用DataEventOccurred方法之前,首先需要将usb4java库导入到Java项目中。

可以通过在项目配置文件中添加库的依赖项,或直接将库的JAR文件放置在项目的classpath下来导入。

一旦导入成功,就可以开始使用usb4java库的功能了。

[第二步:创建UsbServices对象]在使用usb4java库进行USB设备通信之前,需要先创建一个UsbServices对象,用于管理整个USB系统。

可以通过调用UsbHostManager类的静态方法`getDefaultUsbServices()`来创建UsbServices对象。

这个方法将返回当前系统上的默认UsbServices对象。

代码示例如下:UsbServices services = UsbHostManager.getDefaultUsbServices();[第三步:获取USB设备]接下来,需要从UsbServices对象中获取需要与之通信的USB设备。

通过调用UsbServices的getRootUsbHub()方法来获取USB设备的根节点。

然后,可以遍历根节点的子节点,逐个判断是否是目标设备。

可以使用UsbDeviceDescriptor类的getVendorId()和getProductId()方法来判断设备的厂商ID和产品ID是否匹配目标设备。

usbdevicetreeviewer手册

usbdevicetreeviewer手册

USBDeviceTreeViewer是一个用于查看USB设备树的工具,它可以帮助用户快速而准确地了解USB设备的连接和属性信息。

本手册将介绍USBDeviceTreeViewer的安装和基本使用方法,帮助用户更好地利用这一工具。

一、安装USBDeviceTreeViewer1. 前提条件:在安装USBDeviceTreeViewer之前,用户需要确保计算机上已安装Java Runtime Environment (JRE),并且版本在1.8及以上。

2. 下载USBDeviceTreeViewer安装包:用户可以在冠方全球信息站下载USBDeviceTreeViewer的安装包,选择与自己操作系统相匹配的安装包进行下载。

二、使用USBDeviceTreeViewer1. 启动USBDeviceTreeViewer:双击安装包中的可执行文件,启动USBDeviceTreeViewer。

2. 连接USB设备:将需要查看的USB设备连接到计算机上,并确保设备处于工作状态。

3. 打开USB设备树:在USBDeviceTreeViewer的界面中,选择“File”菜单中的“Open”选项,然后在弹出的对话框中选择需要查看的USB设备。

4. 查看USB设备信息:在USBDeviceTreeViewer的主界面中,用户可以查看USB设备的连接拓扑结构、设备描述符、配置描述符等信息。

三、常见问题解决1. USBDeviceTreeViewer无法启动:如果用户在启动USBDeviceTreeViewer时遇到问题,可以尝试重新安装JRE,并确保安装包下载完整且未损坏。

2. USB设备无法显示:如果USBDeviceTreeViewer中未显示连接的USB设备,可能是USB设备驱动未正确安装或设备本身存在故障。

用户可以尝试重新安装USB设备驱动或更换USB线缆。

四、高级功能1. 导出USB设备信息:USBDeviceTreeViewer提供了导出USB设备信息的功能,用户可以选择需要导出的信息类型,并将信息保存为文本文件或图片文件。

java项目调用第三方接口的三种方式

java项目调用第三方接口的三种方式

java项⽬调⽤第三⽅接⼝的三种⽅式问题情境:在⼯作中经常出现调⽤第三⽅接⼝的⽅式,这次需求中有需要调⽤阿⾥云的接⼝上传⽂件,顺便对调⽤⽅式都做了下整理,⽅便后续查看。

⼀.Hutool-http⽅式(详情参考:)1.1 pom中添加hutool的依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.1.0</version></dependency> <!-- json依赖 --><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.4</version> </dependency>1.2 代码⽰例,1.2.1上传⽂件第⼀种就是map的值是转成InputStreamResource,如下两种列举1 import cn.hutool.core.io.resource.InputStreamResource;23 @RequestMapping("/fileupload")4public String upload(MultipartFile file) {5 String result = "";6try {7 InputStreamResource isr = new InputStreamResource(file.getInputStream(),8 file.getOriginalFilename());910 Map<String, Object> params = new HashMap<>();11params.put("file", isr);12params.put("path", "86501729");13params.put("output", "json");14 String resp = HttpUtil.post(url, params);15 Console.log("resp: {}", resp);16 result = resp;17 } catch (IOException e) {18 e.printStackTrace();19 }2021return result;22 }1/**2 *3 * @param url 阿⾥云⽂件上传接⼝4 * @param img 添加⽔印后的图⽚5 * @param newname 新图⽚名称6 * @return7*/8public String fileHutool(String url,BufferedImage img,String newname) {9try {10 Map<String, Object> param =new HashMap();11//1.图⽚压缩且转成byte[]数组12byte[] bytes=bufferedImageTobytes(img, 1);13//2.数组转输⼊流14 InputStream buffin = new ByteArrayInputStream(bytes);15//3.输⼊流转MultipartFile对象,16 MultipartFile file = new MockMultipartFile(ContentType.APPLICATION_OCTET_STREAM.toString(), buffin);1718//4.把MultipartFile这个对象转成输⼊流资源(InputStreamResource)19 InputStreamResource isr = new InputStreamResource(file.getInputStream(),20 file.getOriginalFilename());21/*5.把条件组成map传给hutool,已测过的hutool⽂件上传22 * 第⼀种是map的值是⼀个File,23 * 第⼆种就是map的值是转成InputStreamResource24*/25 param.put("myfile",isr);26 param.put("token", "1_grand");27 param.put("name",newname);28/**29 * 接⼝会返回⼀个json格式的数据30 * {"code":0,"msg":"success","data":{"url":"/pics/isr.jpg"}}31*/32 String post=HttpUtil.post(url,param);33 JSONObject josn=JSON.parseObject(post);34//获取data下的接⼝返回路径35 JSONObject jurl=JSON.parseObject(josn.get("data").toString());3637return jurl.get("url").toString().length()>0?jurl.get("url").toString():null;38 } catch (IOException e) {39 e.printStackTrace();40return null;41 }4243 }1.2.2 上传传⽂件第⼆种是map的值是⼀个File类型,⼀下两种列1 @RequestMapping("/order")2public String getgeneOrder1(@Value("${system.fileUpload}")String url) throws IOException {3 Map<String, Object> param =new HashMap();4 File file=new File("D:\\⽂件表\\test2.jpg");5 param.put("myfile",file);6 param.put("token", "1_grand");7 param.put("name", "isr.jpg");8 String post=HttpUtil.post(url,param);9 JSONObject josn=JSON.parseObject(post);10 JSONObject jurl=JSON.parseObject(josn.get("data").toString());11 System.out.println(jurl.get("url"));12return post;13 }⼆.HttpClient⽅式2.1 pom中添加httpclient依赖<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.3</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.3</version></dependency>2.2 代码案列1 @PostMapping("/order")2public String getgeneOrder(@Value("${system.fileUpload}")String url) throws IOException {3//1:创建⼀个httpclient对象4 HttpClient httpclient = new DefaultHttpClient();5 Charset charset = Charset.forName("UTF-8");//设置编码67//2:创建http的发送⽅式对象,是GET还是post8 HttpPost httppost = new HttpPost(url);910//3:创建要发送的实体,就是key-value的这种结构,借助于这个类,可以实现⽂件和参数同时上传11 MultipartEntity reqEntity = new MultipartEntity();12 File myfile=new File("D:\\⽂件表\\test3.jpg");13 FileBody fileContent = new FileBody(myfile);1415 reqEntity.addPart("myfile",fileContent);16 StringBody content = new StringBody("test.jpg",charset);17 reqEntity.addPart("name",content);18 StringBody contenttoken = new StringBody("1_grand",charset);19 reqEntity.addPart("token",contenttoken);2021 httppost.setEntity(reqEntity);22//4:执⾏httppost对象,从⽽获得信息23 HttpResponse response = httpclient.execute(httppost);24 HttpEntity resEntity = response.getEntity();2526 String resString = EntityUtils.toString(resEntity);27return resString;28 }@RequestMapping("/upload1")public String upload1(MultipartFile file) {String result = "";try {CloseableHttpClient httpClient = HttpClientBuilder.create().build();CloseableHttpResponse httpResponse = null;RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(200000).setSocketTimeout(2000000).build();HttpPost httpPost = new HttpPost(UPLOAD_PATH);httpPost.setConfig(requestConfig);MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE).setCharset(Charset.forName("UTF-8")).addTextBody("output", "json").addBinaryBody("file", file.getInputStream(),ContentType.DEFAULT_BINARY, file.getOriginalFilename());httpPost.setEntity(multipartEntityBuilder.build());httpResponse = httpClient.execute(httpPost);if (httpResponse.getStatusLine().getStatusCode() == 200) {String respStr = EntityUtils.toString(httpResponse.getEntity());System.out.println(respStr);result = respStr;}httpClient.close();httpResponse.close();} catch (Exception e) {e.printStackTrace();}return result;}三.OkHttp3⽅式3.1 OkHttp3引⼊pom依赖 <dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.9.1</version></dependency>3.2.参考案列1 @RequestMapping("/fileorder")2public String upload2(MultipartFile file) {3 String result = "";4try {5 OkHttpClient httpClient = new OkHttpClient();6 MultipartBody multipartBody = new MultipartBody.Builder().7 setType(MultipartBody.FORM)8 .addFormDataPart("file", file.getOriginalFilename(),9 RequestBody.create(MediaType.parse("multipart/form-data;charset=utf-8"),10 file.getBytes()))11 .addFormDataPart("output", "json")12 .build();1314 Request request = new Request.Builder()15 .url(UPLOAD_PATH)16 .post(multipartBody)17 .build();1819 Response response = httpClient.newCall(request).execute();20if (response.isSuccessful()) {21 ResponseBody body = response.body();22if (body != null) {23 result = body.string();24 System.out.println(result);25 }26 }27 } catch (Exception e) {28 e.printStackTrace();29 }3031return result;32 }总结:个⼈觉得hutool的Http已经够⽤了,底层是基于jdk的HttpUrlConnection实现的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在 IBM Bluemix 云平台上开发并部署您的下一个应用。

现在就开始免费试用Java 平台一直都以其平台无关性自豪。

虽然这种无关性有许多好处,但是它也使得编写与硬件交互的 Java 应用程序的过程变得相当复杂。

在本文中,研究科学家蒋清野讨论了两个项目,它们通过提供使Java 应用程序可以使用 USB 设备的 API 而使这个过程变得更容易。

虽然这两个项目仍然处于萌芽状态,但是它们都显示了良好的前景,并已经成为一些实用应用程序的基础。

蒋清野是 HappyFox Engieering Solutions 的研究科学家。

他于 1999年获得清华大学学士学位,2000年获得伊里诺大学(Univ. of Illinois atUrbana­Champaign)硕士学位。

他的研究领域包括 J2ME 、分布式计算、移动计算、嵌入系统及无线通信。

可以通过 qjiang@ 与蒋清野联系。

2003 年 10 月 25 日通用串行总线(Universal Serial Bus USB)规范的第一个版本发表于 1996年 1月。

因为它的低成本、高数据传输率、使用容易和灵活性,USB 在计算机行业里获得了广泛接受。

今天,许多周边设备和装置都是通过 USB 接口连接到计算机上的。

目前,大多数一般用途的操作系统都提供了对 USB 设备的支持,并且用 C 或者 C++ 可以相对容易地开发访问这些外设的应用程序。

不过,Java 编程语言在设计上对硬件访问提供的支持很少,所以编写与 USB 设备交互的应用程序是相当困难的。

IBM 的 Dan Streetman 最早开始了在 Java 语言中提供对 USB 设备的访问的努力。

2001年,他的项目通过 Java 规范请求(Java Specification Request ,JSR)过程被接受为 Java 语言的候选扩展标准。

这个项目现在称为 JSR­80 并且指定了官方包 b 。

同时,在 2000年 6月,Mojo Jojo 和 David Brownell 在 SourceForge 开始了 jUSB 项目。

这两个项目都开发出了 Linux 开发人员可以使用的包,尽管它们都还很不完善。

这两个项目也都开始试图向其他操作系统上的 Java 应用程序提供对 USB 设备的访问,尽管它们都还没有开发出可以使用的包(参阅 参考资料 中有关本文中讨论的这两个项目及其他项目的资料)。

在本文中,将对 jUSB 和 JSR­80 项目作一个简要介绍,不过,我们首先要看一下 USB 协议的具体细节,这样您就可以理解这两个项目是如何与 USB 设备交互的。

我们还将提供代码片段以展示如何用这两个项目的 API 访问 USB 设备。

USB 介绍1994年,一个由四个行业伙伴(Compaq 、Intel 、Microsoft 和 NEC)组成的联盟开始制定 USB 协议。

该协议最初的目的是将 PC 与电话相连并提供容易扩展和重新配置的 I/O 接口。

1996年 1月,发表了 USB 规范的第一个版本,1998年 9月发表了后续版本(版本 1.1)。

这个规范允许 127台设备同时连接到一起,总的通信带宽限制为 12 Mbps 。

后来,又有三个成员(Hewlett­Packard 、Lucent 和 Philips)加入了这个联盟。

2000年 4月,发表了 USB 规范的 2.0版本,它支持高达 480 Mbps 的传输率。

今天,USB 在高速(视频、图像、储存)和全速(音频、宽带、麦克风)数据传输应用中起了关键作用。

它还使各种低速设备(键盘、鼠标、游戏外设、虚拟现实外设)连接到 PC 上。

USB 协议有严格的层次结构。

在所有 USB 系统中,只有一个主设备,到主计算机的的 USB 接口称为 主控器(host controller )。

主控器有两个标准――开放主控器接口(Compaq 的 Open Host ControllerInterface ,OHCI)和通用主控器接口(Intel 的 Universal Host Controller Interface ,UHCI)。

这两个标准提供了同样的能力,并可用于所有的 USB 设备,UHCI 的硬件实现更简单一些,但是需要更复杂的设备驱动程序(因而 CPU 的负荷更大一些)。

USB 物理互连是分层的星形拓朴,最多有七层。

一个 hub 是每个星形的中心,USB 主机被认为是 rootdeveloperWorks 中国技术主题Java technology 文档库在 Java 应用程序中访问 USB 设备介绍 USB 、jUSB 和 JSR­80hub。

每一段连线都是 hub 与 USB 设备的点对点连接,后者可以是为系统提供更多附加点的另一个 hub,也可以是一个提供功能的某种设备。

主机使用主/从协议与 USB 设备通信。

这种方式解决了包冲突的问题,但是同时也阻止了附加的设备彼此建立直接通信。

所有传输的数据都是由主控器发起的。

数据从主机流向设备称为 下行(downstream)或者 输出(out)传输,数据从设备流向主机称为 上 行(upstream)或者 输入(in)传输。

数据传输发生在主机和 USB 设备上特定的端点(endpoint) 之间,主机与端点之间的数据链接称为 管道(pipe)。

一个给定的 USB 设备可以有许多个端点,主机与设备之间数据管道的数量与该设备上端点的数量相同。

一个管道可以是单向或者是双向的,一个管道中的数据流与所有其他管道中的数据流无关。

USB 网络中的通信可以使用下面四种数据传输类型中的任意一种:控制传输:这些是一些短的数据包,用于设备控制和配置,特别是在设备附加到主机上时。

批量传输:这些是数量相对大的数据包。

像扫描仪或者 SCSI 适配器这样的设备使用这种传输类型。

中断传输:这些是定期轮询的数据包。

主控器会以特定的间隔自动发出一个中断。

等时传输:这些是实时的数据流,它们对带宽的要求高于可靠性要求。

音频和视频设备一般使用这种传输类型。

像串行端口一样,计算机上每一个 USB 端口都由 USB 控制器指定了一个惟一的标识数字(端口 ID)。

当USB 设备附加到 USB 端口上时,就将这个 惟一端口 ID 分配给这台设备,并且 USB 控制器会读取 设备描述符。

设备描述符包括适用于该设备的全局信息、以及设备的 配置信息。

配置定义了一台 USB 设备的功能和 I/O 行为。

一台 USB 设备可以有一个或者多个配置,这由它们相应的配置描述符所描述。

每一个配置都有一个或者多个 接口,它可以视为一个物理通信渠道 ;每一个接口有零个或者多个端点,它可以是数据提供者或者数据消费者,或者同时具有这两种身份。

接口由接口描述符描述,端点由端点描述符描述。

并且一台 USB 设备可能还有字符串描述符以提供像厂商名、设备名或者序列号这样的附加信息。

正如您所看到的,像 USB 这样的协议为使用 Java 这种强调平台和硬件无关性的语言的开发人员提出了挑战。

现在让我们看两个试图解决这个问题的项目。

jUSB APIjUSB 项目是由 Mojo Jojo 和 David Brownell 于 2000年 6月创立的。

其目标是提供一组免费的、在 Linux 平台上访问 USB 设备的 Java API。

这个 API 是按照 Lesser GPL (LGPL)条款发表的,这意味着您可以在专有和免费软件项目中使用它。

这个 API 提供了对多个物理 USB 设备的多线程访问,并支持本机和远程设备。

具有多个接口的设备可以同时被多个应用程序(或者设备驱动程序)所访问,其中每一个应用程序(或者设备驱动程序)都占据一个不同的接口。

该 API 支持控制传输、批量传输和中断传输,不支持等时传输,因为等时传输用于媒体数据(如音频和视频),JMF API 已经在其他标准设备驱动程序上对此提供了很好的支持(参阅 参考资料)。

当前,该 API 可以在具有 Linux 2.4 核心或者以前的 2.2.18 核心的 GNU/Linux 版本上工作。

因此可支持大多数最新的版本,例如,该 API 可以在没有任何补丁或者升级的 Red Hat 7.2 和9.0 上工作。

jUSB API 包括以下包:usb.core : 这个包是 jUSB API 的核心部分。

它使得 Java 应用程序可以从 USB 主机访问 USB 设备。

usb.linux : 这个包包含 usb.core.Host 对象的 Linux 实现、bootstrapping 支持和其他可以提升 Linux USB 支持的类。

这个实现通过虚拟 USB 文件系统( usbdevfs )访问 USB 设备。

usb.windows : 这个包包含 usb.core.Host 对象的 Windows 实现、bootstrapping 支持和其他可以提升Windows USB 支持的类。

这个实现仍然处于非常初级的阶段。

usb.remote : 这个包是 usb.core API 的远程版本。

它包括一个 RMI proxy 和一个 daemon 应用程序,它让 Java 应用程序可以访问远程计算机上的 USB 设备。

usb.util : 这个包提供了一些有用的实用程序,可以将 firmware下载到 USB 设备上、将 USB 系统的内容转储到 XML 中、以及将只有 bulk I/O 的 USB 设备工具转换成一个套接字(socket)。

usb.devices : 这个可选包收集了用 jUSB API 访问不同 USB 设备的 Java 代码,包括柯达数码相机和Rio 500 MP3 播放器。

这些 API 经过特别编写以简化访问特定 USB 设备的过程,并且不能用于访问其他设备。

这些 API 是在 usb.core API 之上构建的,它们可以工作在所有支持 jUSB 的操作系统上。

usb.view : 这个可选包提供了基于 Swing 的 USB 树简单浏览器。

它是一个展示 jUSB API 应用的很好的示例程序。

尽管 usb.core.Host 对象的实现对于不同的操作系统是不同的,但是 Java 程序员只需要理解 usb.core 包就可以用 jUSB API 开始应用程序的开发。

表 1 列出了 usb.core 的接口和类,Java 程序员应该熟悉它们:表 1. jUSB 中的接口和类接口说明Bus将一组 USB 设备连接到 Host 上Host表示具有一个或者多个 Bus 的 USB 控制器类说明Configuration提供对设备所支持的 USB 配置的访问,以及对与该配置关联的接口的访问Descriptor具有 USB 类型的描述符的实体的基类Device提供对 USB 设备的访问DeviceDescriptor提供对 USB 设备描述符的访问EndPoint提供对 USB 端点描述符的访问、在给定设备配置中构造设备数据输入或者输出HostFactory包含 bootstrapping 方法Hub提供对 USB hub 描述符以及一些 hub 操作的访问Interface描述一组端点,并与一个特定设备配置相关联PortIdentifier为 USB 设备提供稳定的字符串标识符,以便在操作和故障诊断时使用用 jUSB API 访问一台 USB 设备的正常过程如下:1. 通过从 HostFactory 得到 USB Host 进行 Bootstrap。

相关文档
最新文档