需求∶java通过jna调用一个动态链接库a.so(.so),动态链接库封装报文,然后请求服务器,服务器返回报文,然后解码,最后得到oracle中某个加密后的字符串,最大长度是41个字节。
调用链路一:java通过jna按顺序分别调用了a.so中方法1,2,3,4,5完成上面一整个封装请求报文,解密应答报文的动作,最终拿到了数据库返回的结果,一段加密字符串,字符串实际长度有9个字节,但是输出到控制台时候发现,第1-4个字符串显示正常,第5-8个字符串乱码,第9个字符串正常。
调用链路二:java通过jna调用a.so中的一个all (),该方法内部按顺序调用了方法1,2,3,4,5。同样完成了整个业务流程,此时也返回了同样的加密字符,但输出到控制台,它9个字符都没有出现乱码。
后面经过测试发现,只要返回的字符串,超过4个字节,就会乱码,如果只有4个字节或者少于4个字节,都不会乱码。请问下有人知道这是怎么一回事儿吗?两个链路的调用环境完全一样的。都是在同一台linux服务器上调用的。
调用链路一:java通过jna按顺序分别调用了a.so中方法1,2,3,4,5完成上面一整个封装请求报文,解密应答报文的动作,最终拿到了数据库返回的结果,一段加密字符串,字符串实际长度有9个字节,但是输出到控制台时候发现,第1-4个字符串显示正常,第5-8个字符串乱码,第9个字符串正常。
调用链路二:java通过jna调用a.so中的一个all (),该方法内部按顺序调用了方法1,2,3,4,5。同样完成了整个业务流程,此时也返回了同样的加密字符,但输出到控制台,它9个字符都没有出现乱码。
后面经过测试发现,只要返回的字符串,超过4个字节,就会乱码,如果只有4个字节或者少于4个字节,都不会乱码。请问下有人知道这是怎么一回事儿吗?两个链路的调用环境完全一样的。都是在同一台linux服务器上调用的。