標籤:des io os ar 檔案 資料 sp art on
>> buffer
Buffer對象是全域對象
Buffer支援的編碼方式:ascii, utf8, base64, binary
new Buffer(size)
new Buffer(array)
new Buffer(str, encoding=‘utf8‘)
buffer.write(str,offset=0, encoding=‘utf8‘)
buffer.toString(encoding, start=0, end=buffer.length);
buffer[index]
Buffer.byteLength(string, encoding=‘utf8‘)
buffer.length //分配給buffer對象的記憶體大小 位元組為單位
buffer.copy(targetBuffer, targetStart, sourceStart, sourceEnd=buffer.length)
buffer.slice(start, end);//返回引用同一段記憶體的buffer對象, 注意和str.slice()不同
>> eventEmitter
所有能夠觸發事件的對象都是 events.eventEmitter 的執行個體。
註冊新的事件監聽器時,會觸發 newListener 事件
出錯則觸發 error事件,若沒被捕獲,則輸出調用棧,並退出應用
* event: newListener
* event: error
* emitter.on(event, listener); //向監聽器數組添加1個監聽器
如:
server.on(‘stream‘, function(){
console.log(‘someone connected‘);
});
* emitter.removeListener(event, listener); //從指定監聽器數組,移除指定監聽器 (監聽器數組重新調整索引 splice)
如:
var callback = function(stream){ console.log(‘someone connected!‘)};
server.on(‘stream‘, callback);
//...
server.removeListener(‘stream‘, callback);
* emitter.removeAllListeners(event)
* emitter.listeners(event); //返回指定事件的監聽器數組
* emitter.emit(event, [arg1], [arg2],...); //觸發事件
>> streams
stream是一個抽象介面,node中很多個物件都實現了這個介面(如 request, stdout), stream對象是EventEmitter的執行個體。
stream可以是 唯讀,唯寫,可讀可寫 的
> readable stream 唯讀流
唯讀流的方法、屬性和事件
* event:data
stream.on(data, function(data){
//data: buffer or string (若調用過setEncoding())
});
* event:end
流遇到EOF或TCP中的FIN時觸發,表示不會再有資料進來
stream.on(‘end‘, function(){ });
* event:error
stream.on(‘error‘, function(exception){ });
* event:close
內部的檔案描述符被關閉時觸發
stream.on(‘close‘,function(){ });
* event:fd
當資料流接收到檔案描述符資訊時觸發 (一個檔案的資料流資訊包括2部分:檔案描述符資訊和檔案的資料資訊) unix流
stream.on(‘fd‘, function(fd){ });
* stream.readable
* stream.setEncoding(encoding);
設定data事件返回的是字串而不是buffer對象,編碼方式有:ascii, utf8, base64
* stream.pause(); //暫停觸發data事件
* stream.destroy();
關閉內部的檔案描述符,這樣流不會再觸發任何事件
> writable stream 可寫流
可寫流的方法、屬性和事件:
* event:drain
在一個write方法被調用並返回false後觸發,表示可安全地再次寫入該stream
stream.on(‘drain‘, function(){ });
* event:error
stream.on(‘error‘, function(exception){ });
* event:close
當底層的檔案描述符已終止時觸發
stream.on(‘close‘, function(){ });
* stream.writable
* stream.write(string, encoding=‘utf8‘,[fd]);
用指定的編碼方式編碼字串後寫入流中,若字串被成功重新整理到核心緩衝區則返回true, 否則返回false, 資料在未來寫入。
drain事件通知核心緩衝區何時為空白
* stream.write(buffer); 同上
* stream.end();
通過EOF或FIN來終止流
* stream.end(string, encoding); //~~相當於 stream.write(string, encoding) 後,stream.end()
* stream.end(buffer); //同上
* stream.destroy();
終止底層的檔案描述符,之後流不會發出任何事件
>> global objects 全域對象
* global
全域命名空間對象 ~~類似於瀏覽器環境下的window?
* process 進程對象
* require() 載入相依模組
* require.paths
一個儲存了require函數搜尋路徑的數組,可往裡面添加自訂路徑
* __filename
當前正在執行的指令碼的絕對路徑
* __dirname
當前正在執行指令碼的檔案夾
* module
指向當前模組的引用, module.exports 和 exports指向同一個引用
> process 進程
process對象是EventEmitter的執行個體
* event:exit
進程退出時觸發,是檢查模組狀態的好地方(如單元測試)
process.on(‘exiti‘, function(){ });
如:
process.on(‘exit‘, function(){
process.nextTick(function(){//下一次事件迴圈
console.log(‘this will not run‘);
});
console.log(‘about to exit‘);
});
* event:uncaughtException 未捕獲異常
process.on(‘uncaughtException‘, function(error){ });
如:
讀書筆記: nodejs 參考文檔