【问题标题】:Get binary data (Image file) in Java from Python with xml-rpc protocol使用 xml-rpc 协议从 Python 获取 Java 中的二进制数据(图像文件)
【发布时间】:2014-06-22 17:59:05
【问题描述】:

我有两个应用程序(一个在 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[] b = aux.get("image").toString().getBytes("UTF-8");
        l.setByteImg(b);

在这里我尝试构造一个 BufferedImage。

        InputStream in = new ByteArrayInputStream(l.getByteImg());
        BufferedImage bImageFromConvert = ImageIO.read(in);

但我在 bImageFromConvert 中得到一个空值。

我做错了什么??

【问题讨论】:

    标签: java python image binary xml-rpc


    【解决方案1】:

    Xml 不支持直接嵌入二进制数据,需要将其转换为文本字符串。通常使用 base64 来执行此操作。
    尝试在 python 中对图像数据进行编码,并在 java 中将其转换回二进制流。

    蟒蛇:

    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());
    

    【讨论】:

    • 感谢您的回答,但仍然无法正常工作。我在 BufferedImage 中得到一个空值。
    • @Light1988 你能检查一下java中对象aux的内容和python发送的数据是否相同吗?
    • 我试过了,但是调试模式下的字符串太长了,看不到全部内容。
    • 也许我在这个过程中丢失了信息,或者当我在 Java 中转换为 String 但我怎么知道?
    • 你能发布你在java中获得的原始数据吗?以及java中aux.get("image")的类型和内容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2014-01-28
    • 2016-01-10
    • 2018-01-16
    • 1970-01-01
    • 2013-03-23
    • 2011-01-31
    相关资源
    最近更新 更多