-5

我从 php 向 Java 发送 JSON 字符串,它由一些字符串类型数据和编码图像组成。在 jJva 中,inputStream 被转换为 BufferedReader 和 String。现在字符串看起来像{"name": "xxx", "image":agrewfefe...} 有没有任何可能的方法来将表示图像的字符串解码为位图,或者我必须在其他流中发送图像?

4

2 回答 2

1

如前所述,Base64 编码是可行的方法。但不要手动执行此操作,只需使用Jackson JSON 库,它会自动 Base64 编码/解码二进制数据(任何声明为 的内容byte[])。所以像

public class Request {
  public String name;
  public byte[] image;
}

Request req = new ObjectMapper().readValue(new URL("http://my.service.com/getImage?id=123"),
  Request.class);
于 2012-12-05T06:07:33.940 回答
1

是的; 您需要对图像进行Base64 编码

因为你不能保证你生成的字符是可打印的,或者它们不会破坏 JSON 格式。

有许多 Base64 编码/解码库。Apache commons(编解码器)库中包含一个常用的

这是来自http://www.kodejava.org/examples/375.html的简单用法示例

import org.apache.commons.codec.binary.Base64;
import java.util.Arrays;

public class Base64Encode {
    public static void main(String[] args) {
        String hello = "Hello World";

        //
        // The encodeBase64 method take a byte[] as the paramater. The byte[] 
        // can be from a simple string like in this example or it can be from
        // an image file data.
        //
        byte[] encoded = Base64.encodeBase64(hello.getBytes());

        //
        // Print the encoded byte array
        //
        System.out.println(Arrays.toString(encoded));

        //
        // Print the encoded string
        //
        String encodedString = new String(encoded);
        System.out.println(hello + " = " + encodedString);
    }
}

在发送端,您将为 JSON“图像”字段使用该编码字符串。另一方面,您将解析 JSON,然后将 Base64 字符串解码回图像。

编辑添加:只需重新阅读您的问题(我最初只注意到标签并错过了 PHP 部分) - 在 PHP 方面您需要使用base64_encode

http://php.net/manual/en/function.base64-encode.php

于 2012-12-04T19:06:35.327 回答