基礎(chu)才是重中之(zhi)重~stream和byte[]的概念(nian)與轉化
多看幾篇
之所(suo)以寫這篇文(wen)章完(wan)全是因(yin)為最(zui)近在(zai)研(yan)究FastDFS這個分布式(shi)的(de)(de)(de)文(wen)件(jian)存儲系統,當然這不(bu)是我第(di)一(yi)次(ci)研(yan)究它了,就像我們(men)去看一(yi)本書,我們(men)不(bu)會只看一(yi)篇,而是一(yi)次(ci)次(ci),一(yi)篇篇,每看一(yi)次(ci)會有新的(de)(de)(de)收(shou)獲,而研(yan)究技術,框架也是一(yi)樣(yang),每研(yan)究一(yi)次(ci),同(tong)樣(yang)會有不(bu)同(tong)層次(ci)的(de)(de)(de)收(shou)獲,這次(ci)主要把fastDFS的(de)(de)(de)集(ji)群就配置了一(yi)下,客戶端的(de)(de)(de)多tracker,并在(zai)程序執行(xing)過程中,自己也分析(xi)了一(yi)下它的(de)(de)(de)集(ji)群原理。
原理
事實上(shang),和mongodb,cat等集群(qun)原理(li)相似,fastDFS也是有個路由(you)服(fu)務(wu)器(qi)(qi)(qi)(它被稱為(wei)trackers),首先(xian)客(ke)戶(hu)端(duan)根據(ju)自己的(de)(de)配置,與trackers進行(xing)通訊(xun)拿到(dao)有效的(de)(de)文(wen)件(jian)服(fu)務(wu)器(qi)(qi)(qi)地址(被稱為(wei)storages),然后(hou)客(ke)戶(hu)端(duan)再真正的(de)(de)與它進行(xing)數據(ju)上(shang)的(de)(de)通訊(xun),如上(shang)傳文(wen)件(jian),下載文(wen)件(jian)里,因為(wei)fastDFS實際上(shang)把(ba)文(wen)件(jian)存儲(chu)到(dao)了(le)storages服(fu)務(wu)器(qi)(qi)(qi)上(shang)。
思維導圖
基礎概念
Stream:流(liu),一般指(zhi)文件(jian)流(liu),內存流(liu),可讀的流(liu)和(he)可寫的流(liu)等,是一種數據轉(zhuan)換的格式,流(liu)在(zai)(zai)計算機(ji)里可以表示為流(liu)輸(shu)入或輸(shu)出的一個連(lian)續的字節序(xu)列,它在(zai)(zai)使用完后,需(xu)要把資源(yuan)釋放(fang)。
Byte[]:字(zi)(zi)節(jie)數組,字(zi)(zi)節(jie)是通(tong)過網絡傳輸信(xin)息的單位。在ASCII碼中,一(yi)(yi)(yi)個英文字(zi)(zi)母(不(bu)分大小寫(xie))占一(yi)(yi)(yi)個字(zi)(zi)節(jie)的空(kong)間,一(yi)(yi)(yi)個中文漢字(zi)(zi)占兩(liang)個字(zi)(zi)節(jie)的空(kong)間。當(dang)一(yi)(yi)(yi)個字(zi)(zi)符通(tong)過網絡從一(yi)(yi)(yi)端發到別一(yi)(yi)(yi)端時(shi),會將它轉換成字(zi)(zi)節(jie)數組,需要(yao)再發送。
文(wen)件上(shang)傳時的(de)Stream和byte[],有地我(wo)們需要進行轉換,這里總(zong)結了兩個方法
public byte[] StreamToBytes(Stream stream) { byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); stream.Seek(0, SeekOrigin.Begin); return bytes; } public Stream BytesToStream(byte[] bytes) { Stream stream = new MemoryStream(bytes); return stream; }
這種代碼其實不(bu)難理(li)解,但(dan)其中(zhong)的(de)原(yuan)理(li)值得我們去(qu)回味,因(yin)為畢竟,流和字節數據在網(wang)絡傳(chuan)輸中(zhong)是并不(bu)可少的(de),也是計算機底層所認(ren)識的(de)!