[英]How to recognise the arraybuffer is string or image?
我們正在使用websocket傳輸字節數組中的數據。 在接收端,javascript必須確定接收到的ArrayBuffer是String還是Image類型。 如果它是字符串,則轉換為字符串,否則轉換為Blob。 如下所示,除了我不知道如何識別arraybuffer是字符串還是圖像。
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”,baos); byte [] result = baos.toByteArray();
有兩種方法。 例如,如果您使用的是JPEG文件類型,則可以通過其一般特征來識別JPEG格式:
http://www.fileformat.info/format/jpeg/corion.htm
現在,這是一種有效的方法,但是您必須為每種圖像類型編寫一個程序,這很繁瑣。
現在這: 如何檢查字節數組是否為有效圖像? 也可以使用,它也是另一個有效的答案,但是會遭受將數據轉換為圖像的開銷。
@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作為響應數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.