2011-09-14 24 views
1

我正在编写一个小程序来包装可以在浏览器中使用的专有.dll文件。为了达到这个目标,我使用JNA。 .dll连接到检查扫描仪外围设备,并可从设备内存中提取图像。文件IO之后的奇怪乱码

我不得不在Java的Windows API调用,使用JNA,以获取图像:

// DEVICE is the JNA Library interface 

HANDLEByReference img = new HANDLEByReference(); 
File outfile = new File("my_image.bmp"); 

DEVICE.saveImage(img.getValue(), outfile.getName().getBytes()); 

当代码保存图像,我得到一个名字类似:

C:\Users\user\workspace\JavaProject\bin\my_image.bmpó_¯=Pá 

音符调用的getBytes时(在结束

不爪哇的乱码返回NULL终止byte []数组)在一个字符串?

回答

1

不,String.getBytes()只是返回字符串的编码形式的字节。

请注意,它也使用平台默认编码,除非您指定编码,并且默认可能不是你想要的。

如果你想在最后一个“0”字节数组,你可以使用:

byte[] data = outfile.getName().getBytes(encoding); 
byte[] padded = new byte[data.length + 1]; 
System.arraycopy(data, 0, padded, 0, data.length); 
+0

谢谢您的回答。我做了一个小小的改进,并且在.dll API中实现了第二个参数是Windows类型LPSTR,JNA声明默认映射是Java字符串https://github.com/twall/jna/blob/master/www/ Mappings.md。如果问题仍然存在,我会记住你的代码示例。 –