簡體   English   中英

如何識別arraybuffer是字符串還是圖像?

[英]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

如何識別byte []的內容是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作為響應數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM