码迷,mamicode.com
首页 > 其他好文 > 详细

3,文化操作

时间:2016-08-11 00:26:12      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

与文件操作相关的几个API介绍:
 
 
a, Buffer(数据块)
 
其实我觉得称之为二进制数据缓存区更贴切:
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流时,必须使用到二进制数据。
因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
 
 
b, Stream(数据流)
 
当内存中无法一次装下需要处理的数据时,或者一边读取一边处理时 (更加高效),我们就需要用到数据流。
NodeJS中通过各种Stream来提供对数据流的操作。

所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:

  • data - 当有数据可读时触发。

  • end - 没有更多的数据可读时触发。

  • error - 在接收和写入过程中发生错误时触发。

  • finish - 所有数据已被写入到底层系统时触发。
  • 以大文件拷贝程序为例,我们可以为数据来源创建一个只读数据流,示例如下
    var rs = fs.createReadStream(pathname);

    rs.on(‘data‘, function (chunk) { //当有数据可读时触发此事件 
        doSomething(chunk); 
    });

    rs.on(‘end‘, function () {  //没有更多的数据可读时触发
        cleanUp();
    });
  • 注意:
    Node.js中,Stream 有四种流类型:
    • Readable - 可读操作。

    • Writable - 可写操作。

    • Duplex - 可读可写操作.

    • Transform - 操作被写入数据,然后读出结果。
    • PS:
    • 输入输出流,在有一个参照物的情况下才能分辨是输入还是输出。
    • 电脑读取F盘的文件,对于电脑来说是输入,对于文件本身来说是输出。
c, File System(文件系统)

NodeJS通过fs内置模块提供对文件的操作。fs模块提供的API基本上可以分为以下三类:

  • 文件属性读写。

    其中常用的有fs.statfs.chmodfs.chown等等。

  • 文件内容读写。

    其中常用的有fs.readFilefs.readdirfs.writeFilefs.mkdir等等。

  • 底层文件操作。

    其中常用的有fs.openfs.readfs.writefs.close等等。

此外,fs模块的所有异步API都有对应的同步版本,用于无法使用异步操作时,或者同步操作更方便时的情况。
同步API除了方法名的末尾多了一个Sync之外,异常对象与执行结果的传递方式也有相应变化。
 
 
d, Path(路径)
NodeJS提供了path内置模块来简化路径相关操作,并提升代码可读性。以下分别介绍几个常用的API。
  • path.normalize

    将传入的路径转换为标准路径,具体讲的话,除了解析路径中的...外,还能去掉多余的斜杠。如果有程序需要使用路径作为某些数据的索引,但又允许用户随意输入路径时,就需要使用该方法保证路径的唯一性。以下是一个例子:

      var cache = {};
    
      function store(key, value) {
          cache[path.normalize(key)] = value;
      }
    
      store(‘foo/bar‘, 1);
      store(‘foo//baz//../bar‘, 2);
      console.log(cache);  // => { "foo/bar": 2 }

    坑出没注意: 标准化之后的路径里的斜杠在Windows系统下是\,而在Linux系统下是/。如果想保证任何系统下都使用/作为路径分隔符的话,需要用.replace(/\\/g, ‘/‘)再替换一下标准路径。

  • path.join

    将传入的多个路径拼接为标准路径。该方法可避免手工拼接路径字符串的繁琐,并且能在不同系统下正确使用相应的路径分隔符。以下是一个例子:

      path.join(‘foo/‘, ‘baz/‘, ‘../bar‘); // => "foo/bar"
  • path.extname

    当我们需要根据不同文件扩展名做不同操作时,该方法就显得很好用。以下是一个例子:

      path.extname(‘foo/bar.js‘); // => ".js"
 
 
 参考:http://nqdeng.github.io/7-days-nodejs/#1.1
 

3,文化操作

标签:

原文地址:http://www.cnblogs.com/new-dream-new-hope/p/5759159.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!