如何识别数组缓冲区是字符串还是图像
How to recognise the arraybuffer is string or image?
我们使用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作为响应数据发送。
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- ng打开空字符串
- 正则表达式在字符串中找到base64
- 如何将字符串值从php页面发送到java脚本页面
- 从 Node.js 模块中的缓冲区实例中逐行读取字符串
- JavaScript-将数组缓冲区转换为字符串
- node.js请求POST数组“;第一个参数必须是字符串或缓冲区;
- 节点.js流 - 缓冲区到字符串给出 [对象对象]
- 将包含 ASCII 中二进制十六进制的字符串转换为缓冲区
- 如何将数组缓冲区转换为字符串
- 缓冲区中的nodejs解码字符串返回多行字符串
- 如何将utf-16缓冲区与字符串进行比较
- 如何识别数组缓冲区是字符串还是图像
- 将数组缓冲区转换为字符串
- Redis将字符串保存为某些操作系统的缓冲区,而不是其他操作系统
- 为什么我得到“未处理异常:不是字符串或缓冲区类型”
- Nodejs:将字符串转换为缓冲区
- 将数组缓冲区转换为字符串:超出最大调用堆栈大小