@JRuiCoder
2015-06-27T15:17:27.000000Z
字数 1559
阅读 1304
NodeJS
I/O操作和本地函数调用的处理方式相同:处理过程需要一直等待知道某个操作结束才能继续下去。阻塞式编程继承早期的分时系统分时系统,每一个进程对应着一个用户,使用户们相互隔离。
多线程编程模型是另一个选择,与同一进程内的其他线程共享内存。
事件驱动编程是指程序的执行流程取决于时间的编程风格,事件由事件处理程序或者事件回调函数进行处理。
事件驱动程序编程风格和事件循环相伴相生。
var module=require('module_name'); //加载模块
function change(a){
// do something
}
module.exports=change// 导出模块
只能通过模块名引用,而不能通过文件路径引用,存在一个与其同名的第三方模块优先使用核心模块。
var http=require('http')
一般忽略文件拓展名.js,如果找不到,会自动加上.js扩展名.
var myModule=require('/home/my_module')
var myModule=require('./myModuleDir');
会查找文件夹里是否有package.json的文件,如果文件夹中不存在包定义文件,默认index.js
如果一个模块名既不是相对路径,也不是核心模块,Node就会在当前目录下的node_modules文件夹中查找。最好让NPM管理模块。
模块在首次加载时会被缓存起来,模块的初始化过程只执行了一次,
Node取消了JavaScript默认的全局变量名称控件,而用CommonJS模块系统取而代之。
JavaScript擅长于处理字符串,对于二进制数据不是特别擅长。
创建一个缓存区
使用UTF-8编码格式的字符串来创建缓存区.
var buf=new Buffer('Hello World');
可以指定编码格式作为构造函数的第二个参数,也可以用其他编码格式的字符串创建缓冲区
var buf=new Buffer('asdfas3','base64')
如果缓存区没有用具体内容初始化,则可以通过指定容量大小来创建缓存区,可以通过指定长度创建新的缓存区.
var buf= new Buffer(1024)
在缓存区中获取和设置数据
var buf =new Buffer('my buffer content');
//访问buf缓冲区的第10个字节
console.log(buf[10])
创建一个已被初始化的缓冲区时,缓存区包含的数据并非是0,而是一些随机值。
切分缓存区
var buffer=new Buffer('this is the content');
var littleBuffer=buffer.slice(8,19);
console.log(littleBuffer.toString()); //the content
还是使用父缓存区域,只是引用了父缓冲区不同的起始位置或结束位置。但是这样的话父缓冲器在操作结束依然被继续保持,不会被回收。
复制缓冲区
var buffer1=new Buffer('the content is content');
var buffer2=new Buffer(11);
var targetStart=0;
var sourceStart=9;
var soureceEnd=19;
buffer1.copy(buffer2,targetStart,sourceStart,sourceEnd); //将源缓冲区的9和19位置上的数据复制到目标缓冲区的起始位置。
缓冲区解码
var b64Str=buf.toString('bae64')