近來在看譚振林的《道不遠人..》,他告訴我們「道術」的思想,我認為很經典,「術於外,而道在內」,「術合於道,相得益彰;道術相離,各見其害」。這幾句話對我受益匪淺。以前太過於最求「術」,微軟的新東西太多了,光追求「術」,不斷我發現「太累了」,光看那webcast都看不完,於是不斷的抱怨跟著微軟走是種錯誤的選擇。一年下來沒有多少「道」的積累。
也許是譚大哥給我啟示,我本著知其然更要知其所以然的思想開始了本書的歷程。不求快,只求益。
當我讀到gzipstream對pagestate進行壓縮的時候,我就傻了。短短十幾行**給了我十幾個問號(不要笑,我是初學者)。下面貼出這段**,也許有和我一樣看不懂的,呵呵。
decompress
//////
解壓並反序列化狀態內容
//////
從客戶端取回的頁面狀態字串
///還原後的頁面狀態pair物件
public
static
object
decompress(
string
statestring)
msreader.write(buffer,
0, read);
}zipstream.close();
ms.close();
msreader.position =0
;buffer
=msreader.toarray();
statestring
=convert.tobase64string(buffer);
//反序列化
return
_formatter.deserialize(statestring);
}compress
//////
序列化並壓縮狀態內容
//////
頁面狀態
///結果字串
public
static
string
compress(
object
state)
我分析了下,是我對io框架了解不夠。收集些了資料,經過分析,終於有的思想了。先看張io框架圖,一圖勝萬言。
點選放大
stream 類,msdn解釋,provides a generic view of a sequence of bytes. 就是有序的位元組。
整個繼承stream類系列,採用了decorator設計模式,當然有的是直接繼承,有的是decorator類。
有關這個設計模式的詳細敘述,請看trerrylee的decorator設計模式
在**//
解壓memorystream ms
=new
memorystream(buffer);
gzipstream zipstream
=new
gzipstream(ms, compressionmode.decompress);
中,如果看完了decorator模式,就很好理解了。在反編譯**中,gzipstream有個屬性property(deflatestream class),deflatestream class於stream類關係就是繼承關係,於memorystream類是裝飾關係。gzipstream的屬性類deflatestream在memorystream上加了壓縮演算法。
public
class
gzipstream : stream
public
class
deflatestream : stream
搞清了之後,再尋「道」。
filesteam,memorystream是基於存放資料的介質不同,乙個檔案,乙個是backing store。
以前搞不清楚textwriter,textreader,和stream類關係,現從io框圖和反編譯**中發現他們作為基類沒有任何關係。
他們的子類stringwriter和stringreader簡直就是對string的處理類,只有streamwriter和streamreader都用到stream類作為引數。
如果要把string於檔案介質發生關係,就傳filestream給streamwriter和streamreader,
若要和backing store介質發生關係,就傳memorystream給streamwriter和streamreader,可以類推。
當然上面的規律應該也適合binaryreader和binarywriter。
file靜態類有create方法建立filestream例項。
。。。等等。我想可以結合io框架圖和反編譯源**一一理清關係。有了一定關係,就不用複製別人的**,而不假思索了。呵呵。
實戰非同步IO框架 asyncio 下篇
前面兩節,我們講了協程中的單任務和多工 這節我們將通過乙個小實戰,來對這些內容進行鞏固。在實戰中,將會用到以下知識點 在實戰之前,我們要先了解下在asyncio中如何將協程態新增到事件迴圈中的。這是前提。如何實現呢,有兩種方法 import time import asyncio from queu...
自定義非同步IO框架
非同步就是 非同步 非阻塞 迴圈 select只能完成io多路復用,不能完成非同步 io多路復用 監聽多個socket物件,這個過程是同步的 利用其特性可以開發非同步模組 非同步io 非阻塞的socket io多路復用 自定義非同步框架 deffileno self select監聽的物件,只要內部...
IO框架(二)位元組流
目錄位元組流複製檔案 位元組流的父類 outputstream 位元組輸出流 檔案位元組流 fileoutputstream fileinputstream 輸入1,2,3為用3種方式讀資料,輸入4代表退出 public class demo01 fis.close 讀完別忘了關閉 system.o...