如何在Java中使用base64解码器解码图像字节?

时间:2019-05-21 14:26:29

标签: java python

我正在编写应使用TCP套接字将JSON数据从python客户端发送到java服务器的代码。

JSON对象包含2个字段:name(str)和data(bytes)。

--- python服务器部分---

i = 0
for file in directory:
    f = open("C:\\CImage\\"+file, 'rb')
    print("file->", file)
    f_data = f.read()
    encoded_string = base64.encodebytes(f_data).decode('utf-8')
    json_entry["name"+str(i)] = str(file)
    json_entry["image"+str(i)] = encoded_string 
    img.append(f_data)
    i += 1

json_string = json.dumps(json_entry, ensure_ascii=False, indent=4)
conn.sendall(data.encode())

--- python服务器部分---

我已经使用base64.encodebytes(f_data)来解决此错误:

  

UnicodeDecodeError:“ utf-8”编解码器无法解码位置0:无效的起始字节中的字节0xff

.decode()将字节转换为字符串( JSON字段的值必须为str )。

python发送此json对象

--- java part ---

InputStream in = clientSock.getInputStream();
BufferedInputStream bis = new BufferedInputStream(in);

String before_json = new String(bis.readAllBytes());
JSONParser parser = new JSONParser();  
Object obj = parser.parse( before_json ); 
JSONObject jsonObject = (JSONObject) obj; 

BufferedImage img;
for(int i = 0; i<jsonObject.size()/2;i++)
{
   String img_name = (String) jsonObject.get("name"+i);
   System.out.println("name"+i+" : "+img_name);
}

for(int i = 0; i<jsonObject.size()/2;i++)
{
    String img_byte = (String) jsonObject.get("image"+i);
    System.out.println("image"+i+" : "+img_byte);

    img = ImageIO.read(new ByteArrayInputStream(Base64.getDecoder().decode(img_byte.getBytes())));
    ImageIO.write(img,"jpg",new File("D:\\path\\"+"name"+i));
}

--- java part ---

我已经打印了名称和图像字节字符串。看起来不错。

但是我在img = ImageIO.read()遇到下一个错误:

  

java.lang.IllegalArgumentException:非法的base64字符和...

这就是我希望代码能正常工作的方式:

  1. Python:

    [image 'bytes'] -> ['bytes' base64 encoded] -> ['string']

  2. Java:

    ['string'] -> ['bytes' after getBytes()] -> ['bytes' base64 decoded]

您能帮我发现错误吗?

0 个答案:

没有答案