通过XML-RPC协议在Java中从Python获取二进制数据(图像文件)
我有两个应用程序,一个是用Python写的,另一个是用Java写的。它们通过XML-RPC协议连接在一起。我在数据库中保存了图像文件,存储方式是二进制数据,现在我需要在Java中获取这些图像。
所以我在Python中发起一个查询,获取数据,并返回一个字典,下面是代码:
aux = {
'location_id' : location['id'],
'name' : location['name'] or " ",
'units' : location['units'] or 0.0,
'area' : location['area'] or 0.0,
'day_meter' : location['day_meter'] or 0.0,
'free' : location['free'] or 0.0,
'type' : location['type'] or " ",
'loc_type' : location['loc_type'] or " ",
'image' : str(location['image']),
}
在Java中我可以顺利接收到数据,但我无法从二进制数据中获取图像文件。这里是我的代码:
我在Java中进行类型转换,把二进制数据转换成byte []。
byte[] b = aux.get("image").toString().getBytes("UTF-8");
l.setByteImg(b);
然后我尝试构建一个BufferedImage。
InputStream in = new ByteArrayInputStream(l.getByteImg());
BufferedImage bImageFromConvert = ImageIO.read(in);
但是我得到的bImageFromConvert是null。
我到底哪里做错了呢?
1 个回答
0
XML不支持直接嵌入二进制数据,你需要把它转换成文本字符串。通常我们会用base64来做到这一点。
你可以尝试在Python中对图像数据进行编码,然后在Java中把它转换回二进制流。
Python代码:
aux = {
'location_id' : location['id'],
'name' : location['name'] or " ",
'units' : location['units'] or 0.0,
'area' : location['area'] or 0.0,
'day_meter' : location['day_meter'] or 0.0,
'free' : location['free'] or 0.0,
'type' : location['type'] or " ",
'loc_type' : location['loc_type'] or " ",
'image' : base64.b64encode(str(location['image'])),
}
Java代码:
byte[] image = javax.xml.bind.DatatypeConverter.parseBase64Binary(aux.get("image").toString());