如何识别数组缓冲区是字符串还是图像

How to recognise the arraybuffer is string or image?

本文关键字:缓冲区 字符串 图像 数组 何识别 识别      更新时间:2023-09-26

我们使用websocket来传输字节数组中的数据。在接收端,javascript必须确定接收到的ArrayBuffer是String类型还是Image类型。如果是String,则转换为String,否则转换为Blob。如下所示,只是我不知道如何识别数组缓冲区是字符串或图像。

if (message instanceof ArrayBuffer) {
         if(message of type string)
         var bytearray = new Uint8Array(message);
         to convert to string
        var out = String.fromCharCode.apply(null, bytearray);
        console.log(out);
     }
       if(message of type image){
        imageId.height = 400;
        imageId.width = 600;
        imageId.src = convertArrayBufferBlobUrl(message);
      }

更新:

从服务器上,我将发送如下java代码的图像。我如何在字节数组中附加或前置标志,以通过客户端浏览器(javascript)识别为图像或字符串?

ImageIO.write(getSubImage(bufferedImage,width,height),"png",bao);byte[]result=baos.toByteArray();

有两种方法。例如,如果您使用的是JPEG文件类型,您可以通过它的一般特征来识别JPEG格式:

http://www.fileformat.info/format/jpeg/corion.htm

如何识别字节[]的内容是jpeg?

现在,这是一个有效的方法,但你必须为每种图像类型编程一个,这很乏味。

现在是这样的:如何检查字节数组是否是有效的映像?也可以使用,是另一个有效的答案,但存在将数据转换为图像的开销。

@dandavis建议的一个好的选择是使用一些元数据,比如来自服务器端的标志。

例如:

if(<data is image>)
     result=json_encode(array[flag,data])

并将结果发送回客户端。标志可能会对图像说"是",对字符串说"否",或者1和0或任何你觉得有吸引力的一对。

更新看看这个

import net.sf.json.JSONArray;
ImageIO.write(getSubImage(bufferedImage,width,height), "png", baos );
byte[] result=baos.toByteArray();
JSONObject obj = new JSONObject();
obj.put("imgFlag","true");
obj.put("imgData", result);

但是,放置字节数组本身可能并不容易。我的建议是尝试将字节数组作为json值,但如果不起作用,请首先将字节数组result转换为base64字符串,如下所示:将字节数组转换为json,反之亦然

并做同样的事情。

您可以通过将obj转换为JSON字符串来发送数据。

String jsonData=obj.toString();

并将jsonData作为响应数据发送。