Terminal(终端)

    说起这个使用过linux系统的兄台一般都会知道的,本人理解:类似Putty这些ssh工具通过 软件来实现远程控制主机,对于我们使用者来说,它会显示信息并能接收信息并处理,这个东东就是终端。至于什么伪终端应该就是用软件实现使一套输入输出设备 可以支持多个软终端。

    这里说下node.js中有关的终端模块3个,分别是:STDIO、TTY、REPL。

一、STDIO

     如果我没理解错控制台应该是属于noddjs标准的输入输出,一般把信息输出到stdout或者是stderr。

二、TTY

    这个tty好像就跟伪终端解析一样,现在还不明白,不过不是很主要听讲说是准备放弃。

三、REPL

    这是一个交互式解释器,至于什么是交互性这不解释了。这个REPL为node运行的状态以及信息提供一种交互方式。比如我们在windows下命令行输入:

node
    >consolg('hello world!');

这样就会打印出hello world字符。

四、利用控制台

    上面使用console.log();语句打印信息,那么我们可以使用这个查看很多信息,比如变量的值、堆栈的信息以及断言。

    console.log([data],[...]):第一个参数是字符串,可以带上像C语言一样的占位符,后面可选,本人网上查看了一些资料,占位符支持%s(字符串),%d(数字),%j(json)。例子如下:

//不带占位符以及参数,输出:hello world
    console.log('hello world');
    //带上占位符,不过不带参数。输出:hello 
    console.log('hello %s');
    //带上占位符以及参数。输出:hello world
    console.log('hello %s', 'world');
    //输出:age is 30
    console.log('age is %d',30);
    //输出:json data:{'age':30}
    console.log('json data:%j',{age:30});
    //输出:{age:30}
    console.log({age:30});
    //时间标记,标识lable开始
    console.time('lable');
    //时间标记,标识lable结束。输出lable : 100ms(可以计算中间的处理时间)
    console.timeEnd('lable');
    //打印当前堆栈lable的信息。输出Trace : lable ----------------------
    console.trace('lable');
    //断言语法:console.assert(expression,[message])
    //输出AssertionError : 异常咯
    console.assert(false,'异常咯');

  

五、Buffer

    这个Buffer的出现基本上说就是为了解决js本身对于二进制不友好的局面。大家都知道nodejs的存在依赖网络,对不同资源的请求以及响应甚至是文件都是用二进制出里的,使用inodejs专门提供这个机制来处理字节流。

    目前本人收集了Buffer支持的编码有:'ascii':这个速度快;'utf8':支持Unicode字符;'base64':base64字符串编码; 'utf16le'、'ucs2'、 'hex'。

    创建Buffer实例,目前知道的是有4种;

//第一种指定大小,这个大小是固定的不会因为write的写入而改变
    var buf = new Buffer(8);
    buf.write('luoliang');
    console.log(buf);
    //第二种:数组初始化。输出:<Buffer 01 03 fe ff 00>。可以看出是求256的余数,而且不是四舍五入完全是取整
    var buf1 = new Buffer([1.2,3.7,254,255,256]);
    console.log(buf1);
    //第三种:字符串初始化并带编码,默认utf8
    var buf2 = new Buffer('中国人');
    //输出:中国人
    console.log(buf2.toString());
    //下面将会输出乱码
    buf2 = new Buffer('中国人','ascii');
    console.log(buf2.toString());
    //下面将会输出: 9 e4b8ade59bbde4baba
    var buf3 = new Buffer('中国人');
    console.log(buf3.length);
    console.log(buf3.toString('hex'));
    //上面的不同编码对象的length是不同的,这个需要特别注意以下可以自己实验下
    
    //还有一个创建Buffer对象的slice,不过这个我基本没用过,表示截取字符串创建buffer
    var buf4 = new Buffer('中国人');
    var buf5 = buf4.slice();
    //输出:中国人
    console.log(buf5.toString());
    //输出:国
    buf5 = buf4.slice(3,6);