最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js二進(jìn)制數(shù)據(jù)及其互相轉(zhuǎn)化實(shí)現(xiàn)詳解

 更新時(shí)間:2023年02月27日 09:53:36   作者:元子不圓呀  
這篇文章主要為大家介紹了js二進(jìn)制數(shù)據(jù)及其互相轉(zhuǎn)化實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

file

在js中有很多二進(jìn)制數(shù)據(jù),有file,base64,Blob,ArrayBuffer,FileReader。這些二進(jìn)制數(shù)據(jù)在文件導(dǎo)出和下載的時(shí)候是經(jīng)常會(huì)用到的,我們這篇文章就是介紹這些二進(jìn)制數(shù)據(jù)以及它們之間的轉(zhuǎn)化。

文件(File)接口提供有關(guān)文件的信息,并允許網(wǎng)頁(yè)中的 JavaScript 訪問(wèn)其內(nèi)容。實(shí)際上,F(xiàn)ile 對(duì)象是特殊類型的 Blob,且可以用在任意的 Blob 類型的 context 中。Blob 的屬性和方法都可以用于 File 對(duì)象。

file文件

file文件一般有兩種來(lái)源

  • <input> 元素上選擇文件后返回的 FileList 對(duì)象;
  • 文件拖放操作生成的 DataTransfer 對(duì)象;

每個(gè) File 對(duì)象都包含以下屬性,這些屬性都繼承自 Blob 對(duì)象:

  • lastModified:引用文件最后修改日期,為自1970年1月1日0:00以來(lái)的毫秒數(shù);
  • lastModifiedDate:引用文件的最后修改日期;
  • name:引用文件的文件名;
  • size:引用文件的文件大?。?/li>
  • type:文件的媒體類型(MIME);
  • webkitRelativePath:文件的路徑或 URL。

base64

Base64 是一種基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的表示方法。Base64 編碼普遍應(yīng)用于需要通過(guò)被設(shè)計(jì)為處理文本數(shù)據(jù)的媒介上儲(chǔ)存和傳輸二進(jìn)制數(shù)據(jù)而需要編碼該二進(jìn)制數(shù)據(jù)的場(chǎng)景。這樣是為了保證數(shù)據(jù)的完整并且不用在傳輸過(guò)程中修改這些數(shù)據(jù)。

Blob

Blob 對(duì)象表示一個(gè)不可變、原始數(shù)據(jù)的類文件對(duì)象。它的數(shù)據(jù)可以按文本或二進(jìn)制的格式進(jìn)行讀取,也可以轉(zhuǎn)換成 ReadableStream 來(lái)用于數(shù)據(jù)操作。

也就是說(shuō)blob對(duì)象是原始二進(jìn)制數(shù)據(jù)對(duì)象,是不可修改的。

blob的用法

new Blob(array, options);

array:由 ArrayBuffer、ArrayBufferView、Blob、DOMString 等對(duì)象構(gòu)成的,將會(huì)被放進(jìn) Blob;

options:可選的 BlobPropertyBag 字典,它可能會(huì)指定如下兩個(gè)屬性

type:默認(rèn)值為 "",表示將會(huì)被放入到 blob 中的數(shù)組內(nèi)容的 MIME 類型。

endings:默認(rèn)值為"transparent",用于指定包含行結(jié)束符\n的字符串如何被寫入,不常用。

ArrayBuffer

ArrayBuffer 對(duì)象用來(lái)表示通用的、固定長(zhǎng)度的原始二進(jìn)制數(shù)據(jù)緩沖區(qū)。ArrayBuffer 的內(nèi)容不能直接操作,只能通過(guò) DataView 對(duì)象或 TypedArrray 對(duì)象來(lái)訪問(wèn)。這些對(duì)象用于讀取和寫入緩沖區(qū)內(nèi)容。

TypedArray:用來(lái)生成內(nèi)存的視圖,通過(guò)9個(gè)構(gòu)造函數(shù),可以生成9種數(shù)據(jù)格式的視圖。

  • Int8Array
  • Uint8Array
  • Uint8ClampedArray
  • Int16Array
  • Unit16Array
  • Int32Array
  • Uint32Array
  • Float32Array
  • Float64Array

DataViews:用來(lái)生成內(nèi)存的視圖,可以自定義格式和字節(jié)序。

ArrayBuffer的使用

new ArrayBuffer(bytelength)

FileReader

FileReader用于讀取文件并提取其內(nèi)容, 可以將 Blob 讀取為不同的格式。

FileReader的使用

創(chuàng)建

const reader = new FileReader();

FileReader還有很多方法和事件,感興趣的可以去MDN上查看。

二進(jìn)制類型數(shù)據(jù)的互相轉(zhuǎn)化

file轉(zhuǎn)base64

let reader = new FileReader();
reader.readAsDataURL(file[0])

base64轉(zhuǎn)blob

const base64toBlob = (base64Data, contentType, sliceSize) => {
  const byteCharacters = atob(base64Data);
  const byteArrays = [];
  for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
    const slice = byteCharacters.slice(offset, offset + sliceSize);
    const byteNumbers = new Array(slice.length);
    for (let i = 0; i < slice.length; i++) {
      byteNumbers[i] = slice.charCodeAt(i);
    }
    const byteArray = new Uint8Array(byteNumbers);
    byteArrays.push(byteArray);
  }
  const blob = new Blob(byteArrays, {type: contentType});
  return blob;
}

blob轉(zhuǎn)ArrayBuffer

function blobToArrayBuffer(blob) { 
  return new Promise((resolve, reject) => {
      const reader = new FileReader();
      reader.onload = () => resolve(reader.result);
      reader.onerror = () => reject;
      reader.readAsArrayBuffer(blob);
  });
}

blob轉(zhuǎn)base64

function blobToBase64(blob) {
  return new Promise((resolve) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result);
    reader.readAsDataURL(blob);
  });
}

ArrayBuffer轉(zhuǎn)blob

const blob = new Blob([new Uint8Array(buffer, byteOffset, length)]);

ArrayBuffer轉(zhuǎn)base64

const base64 = btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer)));

base64轉(zhuǎn)file

const base64ConvertFile = function (urlData, filename) { // 64轉(zhuǎn)file
    if (typeof urlData != 'string') {
        return;
    }
    let arr = urlData.split(',')
    let type = arr[0].match(/:(.*?);/)[1]
    let fileExt = type.split('/')[1]
    let bstr = atob(arr[1])
    let n = bstr.length
    let u8arr = new Uint8Array(n)
    while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new File([u8arr], 'filename.' + fileExt, {
        type: type
    });
}

溫馨提示:由于文章篇幅有限,關(guān)于幾種二進(jìn)制的詳細(xì)用法可以去MDN查看。

以上就是js二進(jìn)制數(shù)據(jù)及其互相轉(zhuǎn)化實(shí)現(xiàn)詳解的詳細(xì)內(nèi)容,更多關(guān)于js二進(jìn)制數(shù)據(jù)互相轉(zhuǎn)化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 微信小程序 swiper組件構(gòu)建輪播圖的實(shí)例

    微信小程序 swiper組件構(gòu)建輪播圖的實(shí)例

    這篇文章主要介紹了微信小程序 swiper組件構(gòu)建輪播圖的實(shí)例的相關(guān)資料,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,需要的朋友可以參考下
    2017-09-09
  • js前端圖片加載異常兜底方案

    js前端圖片加載異常兜底方案

    這篇文章主要為大家介紹了js前端圖片加載異常兜底方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • AngularJS 表達(dá)式詳細(xì)講解及實(shí)例代碼

    AngularJS 表達(dá)式詳細(xì)講解及實(shí)例代碼

    本文主要介紹AngularJS 表達(dá)式,這里對(duì)AngularJS 表達(dá)式詳細(xì)介紹和實(shí)例代碼,有需要的小伙伴可以參考下
    2016-07-07
  • JS面試題解['1',?'7',?'11'].map(parseInt)?輸出

    JS面試題解['1',?'7',?'11'].map(p

    這篇文章主要為大家介紹了JS面試題解['1',?'7',?'11'].map(parseInt)?會(huì)輸出什么內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 微信小程序 地圖(map)實(shí)例詳解

    微信小程序 地圖(map)實(shí)例詳解

    這篇文章主要介紹了微信小程序 地圖(map)實(shí)例詳解的相關(guān)資料,這里對(duì)微信小程序的地圖API 進(jìn)行了詳細(xì)介紹并附示例代碼和實(shí)現(xiàn)效果圖,需要的朋友可以參考下
    2016-11-11
  • 微信小程序 input輸入框詳解及簡(jiǎn)單實(shí)例

    微信小程序 input輸入框詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了微信小程序 input輸入框詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 詳解JavaScript中數(shù)組的相關(guān)知識(shí)

    詳解JavaScript中數(shù)組的相關(guān)知識(shí)

    這篇文章主要介紹了JavaScript中中數(shù)組的相關(guān)知識(shí),是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-07-07
  • JavaScript loader原理簡(jiǎn)單總結(jié)示例解析

    JavaScript loader原理簡(jiǎn)單總結(jié)示例解析

    這篇文章主要為大家介紹了JavaScript loader原理簡(jiǎn)單總結(jié)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 前端項(xiàng)目中監(jiān)聽(tīng)localStorage的變化

    前端項(xiàng)目中監(jiān)聽(tīng)localStorage的變化

    這篇文章主要為大家介紹了前端項(xiàng)目中監(jiān)聽(tīng)localStorage的變化的解決思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 深入講解JavaScript之繼承的多種方式和優(yōu)缺點(diǎn)

    深入講解JavaScript之繼承的多種方式和優(yōu)缺點(diǎn)

    本文講主要解JavaScript各種繼承方式和優(yōu)缺點(diǎn),文章將六種繼承方式說(shuō)明,分別有原型鏈繼承、借用構(gòu)造函數(shù)(經(jīng)典繼承)、組合繼承、原型式繼承、寄生式繼承、 寄生組合式繼承,這六種方式,需要的朋友可以參考一下
    2021-10-10

最新評(píng)論

沾益县| 泾源县| 广德县| 通海县| 江北区| 阳新县| 江阴市| 曲沃县| 宜都市| 凤庆县| 伊川县| 屏东县| 方正县| 南通市| 科技| 老河口市| 湖口县| 嘉义县| 马山县| 武胜县| 吉木萨尔县| 丰原市| 安溪县| 定边县| 遂溪县| 什邡市| 古浪县| 顺平县| 龙口市| 安仁县| 应用必备| 凭祥市| 芮城县| 咸丰县| 商水县| 定日县| 齐齐哈尔市| 荣成市| 郸城县| 嘉定区| 满洲里市|