今天工作中遇到了一個情景: 前端向後臺發送一個請求,希望後臺返回一組數據,由於後臺返回的數據量很大,希望儘可能壓縮響應的大小 我的想法:後臺將數據(Short的數組)直接轉換成Byte[] 然後將byte[]發送至前端。 傳統的Json是將數據序列化成Json文件在發送到前端,這樣做的好處是處理簡單 ...
今天工作中遇到了一個情景:
前端向後臺發送一個請求,希望後臺返回一組數據,由於後臺返回的數據量很大,希望儘可能壓縮響應的大小
我的想法:後臺將數據(Short的數組)直接轉換成Byte[] 然後將byte[]發送至前端。
傳統的Json是將數據序列化成Json文件在發送到前端,這樣做的好處是處理簡單,但是數據轉換成字元串發送時數據量會變大
舉個例子:一個short類型的數據 256 ,如果用位元組數組直接發送,只需要2個位元組,但如果轉換成字元串 ,則需要四個位元組:'2','5','6',','。(註:Json是使用‘,’來分割數據的)。
背景陳述完了,我的思路:其實我的需求和後端發送一個圖片的需求是一致的,圖片必須按照位元組數組傳輸,所以百度了一下,找到了下麵的鏈接:
https://my.oschina.net/smartsmile/blog/815496
核心代碼:
var resp = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ByteArrayContent(b),
StatusCode = HttpStatusCode.OK
};
return resp;
這樣處理後,前端收到的數據就是位元組數組了
後端處理完成後,前端使用Ajax請求時,使用ArrayBuffer接收數據無法初始化,沒辦法,繼續百度,然後就有了下麵的處理方法:
var oReq = new XMLHttpRequest();
oReq.open("GET", "http://localhost:11784/api/test", true);
oReq.responseType = "arraybuffer";
oReq.onload = function (oEvent) {
var arrayBuffer = oReq.response;
if (arrayBuffer) {
var byteArray = new Int16Array(arrayBuffer);
};
oReq.send(null);