获取错误java.io.IOException:参数不正确

获取错误java.io.IOException:参数不正确,java,Java,我使用hidapi jni.dll/hidapi jni.so并用Java编写程序来读写数据到我的设备。我的设备定义为HID设备。我的代码在linux(Debian 7.1)上运行得很好,我可以从设备读写数据。但在Windows(Windows 7和XP)上,我只能读取数据,当尝试写入时,我会出现以下错误: java.io.IOException: The parameter is incorrect. 写入方法的一部分是: try { HIDManager hid_mgr = HI

我使用
hidapi jni.dll/hidapi jni.so
并用Java编写程序来读写数据到我的设备。我的设备定义为HID设备。我的代码在linux(Debian 7.1)上运行得很好,我可以从设备读写数据。但在Windows(Windows 7和XP)上,我只能读取数据,当尝试写入时,我会出现以下错误:

java.io.IOException: The parameter is incorrect.
写入方法的一部分是:

try {
     HIDManager hid_mgr = HIDManager.getInstance();
     dev = hid_mgr.openById(VENDOR_ID, PRODUCT_ID, null);
     byte[] by = new byte[4];
     by[0] = (byte) 1;
     by[1] = (byte) 2;
     by[2] = (byte) 3;
     by[3] = (byte) 4;
     dev.write(by);
     } catch (IOException | NullPointerException ne) {
     System.err.println(ne);
     }

如何修复此错误?

@Hassan Amiri:基本上Linux会将地址转换为值并进行写入,但windows确实会纠正。。对ur数组使用Foreach循环,然后写入数据

try {
     HIDManager hid_mgr = HIDManager.getInstance();
     dev = hid_mgr.openById(VENDOR_ID, PRODUCT_ID, null);
     byte[] by = new byte[4];
     by[0] = (byte) 1;
     by[1] = (byte) 2;
     by[2] = (byte) 3;
     by[3] = (byte) 4;
   for(byte b : by){  dev.write(b);}}

我为我的错误找到了解决办法。 在windows中,第一个字节将是0。那么我的代码是:

by[0] = 0;
如果我通过

dev.write(by);

正常工作。

首先不要隐藏异常堆栈跟踪。如果无法处理异常,请不要捕获它。或者至少使用
ne.printStackTrace()
打印堆栈跟踪。确保不同系统中的字节顺序相同。我知道windows和unix之间有区别。由于您处于字节级别,因此可能需要根据操作系统反转代码中的字节顺序。我会在代码中抛出System.out.println()来打印字节值,然后比较每个系统的输出。问题是什么?(不是downvoter)“但是windows确实正确”除了语法错误之外,听起来你在反驳海报上关于windows的说法,不要说为什么他这样做是错误的,为什么你的方法是正确的。然后说你以前写整个数组时遇到了问题,但是当你一个字节一个字节地写出来时就不再有问题了。如果你忍住不说,有人只是瞥了一眼你说的话,就会认为你只是在胡乱扔东西,希望它是对的。@Hi Luckyman Nevermore!!!在hidapi jni方法中
写入
获取
字节的数组
,如果发送
字节
则获取错误。写入(字节[]是)。错误代码的堆栈跟踪为:java.io.IOException:参数不正确。com.codeminders.hidapi.HIDDevice.write(本机方法),PKGMain.hidapi.readDevice(hidapi.java:133),PKGMain.hidapi.connectDevice(hidapi.java:43),PKGMain.DriverClass.run(DriverClass.java:7),java.lang.Thread.run(Thread.java:722)