Byte和byte[]數組

?

Byte和byte[]數組,“表示一個 8 位無符號整數, 一般為8位二進制數”。

Byte是計算機最基礎的存儲單位和最基礎的通訊單位。

而所有的類型都是支持由byte[]類型轉換而來。

?

為什么說Byte是最基礎類型那,

其實這里的關鍵所在是,計算機最基礎的算法是編碼,包括媒體文件、圖片、各種文檔以致計算機算有數據的文件展現都是字符串,而這些字符串都是由編碼得來。

?

不管你是各種千奇百怪的字符串組成的格式,最終都要根據編碼表,字符轉換成相對應的十進制數字,而這相應的十進制數字那,就會存儲在byte[]數組中(這里的十進制數是用來計算的,存儲時會自動轉換為二進制數字存儲,程序計算時會按十進制計算)。

?

媒體文件、圖片、各種文檔等等—》源文件由字符串組成,多個字符—》單個字符—》十進制數字(根據相應編碼)—》byte[]數組(單個字符) —》byte[]數組(多個字符) —》媒體文件、圖片、各種文檔等等存儲單位或通訊單位。

?

此時這個“單個字符”二進制的長度就是根據相應編碼得來的,由多個字符組成的byte[]就組成了媒體文件、圖片、各種文檔等等的源文件。

?

具體如下:

UTF-8編碼:一個英文字符等于一個字節,一個中文(含繁體)等于三個字節。

Unicode編碼:一個英文等于兩個字節,一個中文(含繁體)等于兩個字節。

?

下面可以看到UTF-8編碼的byte[]數組(C# byte[]默認存儲計算為十進制),所以說最終計算機數據是由byte類型組成數據為基礎的。

? ? ? ? ? ? ? ? ? ? ? ?

?

?

?

?

?

網絡傳輸:

?

如果是自己程序間的對接,byte[]類型理論上就夠了(實際上也不夠,哈哈),在傳輸段傳輸byte[]類型,收取端收取byte[]類型,然后轉化為原格式就可以了。

?

“a張”編碼—>byte[0]=97、byte[1]=229、byte[2]=188、byte[3]=160(byte[0]=01100001、byte[1]=11100101、byte[2]=10111100、byte[3]=10100000)—>傳輸—>收取為byte[]—> 解碼“a張”。

?

?????? 但是如果傳輸的數據是開放式的,或者生成可讀的文件,比如文件格式的,url,xml、json的話,是不能存儲byte[]型的,看不懂也沒法解析,這就要求再吧byte[]再編碼為字符串類型。

?

到了網絡傳輸過程了,前文我們已經得到了文件最基礎的存儲格式,byte[]數組,但作為程序傳輸他面臨個問題,因為程序傳輸一般可見的是以字符形式傳輸的(中間過程是網絡層自動轉換的),那么就需要把byte[]類型轉換為字符串傳輸,很多人是感覺怎么有轉換為字符串了,這不是和原來一樣了嗎,其實不是,現在編碼的就不是任意字符串了,是基礎的二進制數字10做成的字符串,相當于把byte[]類型每個byte轉換為字符串傳送,而在接收端在轉換為byte[]數組,這相當于無編碼過程。

?

byte[]是數據類型的,長度是有限制的,也不靈活。所以說基礎傳輸其實是1和0組成的長字符串。

簡單的說就是數據編碼成byte[],byte[]再二次編碼成為易于傳送的字符串。

如下

“a張”編碼—>byte[0]=97、byte[1]=229、byte[2]=188、byte[3]=160(byte[0]=01100001、byte[1]=11100101、byte[2]=10111100、byte[3]=10100000)—>不編碼“01100001111001011011110010100000” —>傳輸—>解析成為byte[]—>解碼“a張”

?

“a張”編碼—>byte[0]=97、byte[1]=229、byte[2]=188、byte[3]=160(byte[0]=01100001、byte[1]=11100101、byte[2]=10111100、byte[3]=10100000)—> ?base64 編碼串—>傳輸—>解析成為byte[]—>解碼“a張”

?

?????? 更多的是,在轉換字符串傳輸的過程,還要對這個byte[]進行編碼。

注1:在傳輸過程中,基礎的byte[]類型還可以做各種編碼傳輸,如base64字符串、16進制編碼、xml、json、html等等,不過萬變不離其中的是編碼和解碼。

?

注2:“傳輸”時,還是以基礎二進制數據傳輸,不過這和應用層無關,是傳輸層自動完成了,應用層的數據只需要處理自己的傳輸格式就可以了。

轉載于:https://www.cnblogs.com/cuihongyu3503319/p/5031670.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256298.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256298.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256298.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【圖像處理】——opencv常用函數

目錄 讀取圖像 注意: 1、imread和plt.show以及pil.image,show的區別: 2、imread中的rgb的順序 顯示圖像

網絡協議:TCP/IP、SOCKET、HTTP

網絡七層 由下往上分別為物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。其中物理層、數據鏈路層和網絡層通常被稱作媒體層,是網絡工程師所研究的對象;傳輸層、會話層、表示層和應用層則被稱作主機層,是用戶所面向和關心的內…

halcon自標定

概念 該算法可以在不使用標定板的情況下計算相機內參,從而進行畸變校正,適用于畸變較大的情況。算法很簡單: 1.求出圖像邊緣應進行分割。 2.基于篩選線段的自標定radial_distortion_self_calibration。 3.得到標定區域。 4.根據指定的徑向畸…

jdk動態代理

簡單的說,代理模式是在目標對象和訪問對象之間增加了一層代理對象,所有的訪問對象通過代理對象來實現對目標對象的調用。 代理對象和目標對象實現同一個接口,由代理對象來調用目標對象,對于外部來說,代理對象就可以替代…

【圖像處理】——圖像的灰度化處理(Python實現三種方法——最大值法、平均值法、加權均值法、gamma校正)

目錄 一、什么是圖像的灰度化? 二、灰度化的幾種方法(最大值法、平均值法、加權均值法、gamma校正)

配置https

引子: 最近在一篇文章中了解到EFF(電子前哨基金會)為了推廣https協議,成立了一個letsencrypt項目,可以發放免費的證書,此證書可以被大多數主流瀏覽器所信任,這個邪惡的念頭一爆發,就讓我走上了一條坎坷的不…

C# —— 序列化與反序列化

概念 序列化 通過使用不同的類(BinaryFormatter,SoapFormatter,XmlSerializer)將對象狀態轉換為可保持或傳輸的格式的過程,具體是將對象轉變為字節流,其目的是為了保存數據的狀態,方便后續還原調用。包括三種序列化形式:二進制序列化,SOAP序列化,XML序列化。于此過…

CentOS 6.5安裝VNC server

1. 安裝桌面,安裝時選擇了Desktop可以忽略 # yum groupinstall Desktop # yum install gnome-core xfce4 firefox 2. 安裝VNC server # yum install tigervnc-server 3. 配置服務 # chkconfig vncserver on 4. 設置VNC用戶密碼 # vncpasswd 5. 配置文件 # vi /etc/s…

【圖像處理】——圖像灰度直方圖的繪制(直接調用函數和自定義函數)

目錄 一、灰度直方圖概念 二、直接調用opencv的函數caclHist() 1、函數介紹 2、實例 <

Codeforces 722C. Destroying Array

C. Destroying Arraytime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given an array consisting of n non-negative integers a1,?a2,?...,?an. You are going to destroy integers in the array one by o…

C#中數據類型及其轉換知識點匯總

概念 C#中數據類型分為兩大類&#xff0c;分別是值類型和引用類型。 值類型變量是從類 System.ValueType 中派生出來的&#xff0c;當聲明一個值類型變量時&#xff0c;系統分配內存來存儲值。 整形 包括8種類型&#xff0c;區別在于字節數和有無符號。 浮點型 float占用…

10億個字符串的排序問題

一、問題描述 有一個大文件&#xff0c;里面有十億個字符串&#xff0c;亂序的&#xff0c;要求將這些字符串以字典的順序排好序 二、解決思路 將大文件切割成小文件&#xff0c;每個小文件內歸并排序&#xff1b; 對所有的小文件進行歸并排序——多重歸并排序 三、解決方案 3.…

MVC學習IIS的不同版本(一)

一&#xff1a;IIS5.0運行在進程InetInfo.exe中&#xff0c;該進程寄宿著一個名為World Wide Publishing Service&#xff08;W3VC&#xff09;的window服務。 W3VC的主要功能&#xff1a;包括HTTP請求的監聽、工作進程和配置管理 檢測到HTTP 請求時&#xff1a; 根據擴展名判斷…

Halcon中visualize_object_model_3d算子詳解

概念 此函數用于顯示3d模型。該函數功能很多,包括設置位姿,顏色,鼠標翻轉、縮放、平移,選擇和取消選擇目標,降低鼠標靈敏度,切換檢查模式等。 參數 visualize_object_model_3d( : : WindowHandle, ObjectModel3D, CamParam, PoseIn, GenParamName, GenParamValue, Tit…

random()模塊隨機函數的用法總結

random()是Python中生成隨機數的函數&#xff0c;是由random模塊控制&#xff0c;random()函數不能直接訪問&#xff0c;需要導入random 模塊&#xff0c;然后再通過相應的靜態對象調用該方法才能實現相應的功能 目錄 1. random.random() 2. random.uniform() 3. random.ra…

ansible命令應用示例

ansible命令應用示例 ping slave組ansible slave -m ping 用bruce 用戶以root 身份pingansible slave -m ping -u bruce --sudo 用bruce 用戶sudo 到batman 用戶pingansible slave -m ping -u bruce --sudo --sudo-user batman 給slave組安裝ftpan…

史上超全halcon常見3D算子匯總(一)

讀取3D模型 read_object_model_3d 此算子用于讀取3D對象。 read_object_model_3d( : : FileName, Scale, GenParamName, GenParamValue : ObjectModel3D, Status) FileName:文件名,halcon支持多種3d數據格式的讀取,包括 .off, .ply, .dxf, .om3, .obj, .stl等格式。 1).…

Python:常用模塊簡介(1)

sys模塊 >>> sys.platform #返回操作系統平臺名稱 win32 >>> sys.stdin #輸入相關 <open file <stdin>, mode r at 0x000000000337B030> >>> sys.stdout #輸出相關 <open file <stdout>, mode w at 0x000000000337…

【圖像處理】——Python實現圖像加噪(隨機噪聲、椒鹽噪聲、高斯噪聲等)

目錄 1、隨機噪聲 2、椒鹽噪聲 3、高斯噪聲 補充:numpy.clip函數 4、其他噪聲 1、隨機噪聲 隨機噪聲就是通過隨機函數在圖像上隨機地