3,文化操作

与文件操作相关的几个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

 

时间: 2024-08-23 06:13:26

3,文化操作的相关文章

安装Debian 7.8 过程,以及该系统的配置过程

最近,我给自己的电脑安装了Debian操作系统,版本7.8 stable.Debian我相信大家都能了解,它是Ubuntu的基础,Ubuntu是基于Debian的unstable开发的.我安装这个系统时,里面包含的开源显卡驱动可以带动我的AMD显卡(14.04之前的Ubuntu是带动不了的,需要在bios禁用独显),所以一个大心病解除了. 我有着四年的Linux系统使用经验,但是惭愧的是,我对Linux基本还处于一无所知的状态.由于这个系统版本较多,所以我尝试安装了每一个主流版本:Ubuntu.

JAVASE02-Unit08: 文本数据IO操作 、 异常处理

Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; /** * java.io.Ob

Linux TCP拥塞控制中undo操作

Linux的TCP实现复杂且繁琐,建议不要直接去看代码,而是花点时间把TCP规范先撸一遍.本文主要描述一下TCP实现中undo操作,然后顺便再吐一下槽(千万不要觉得吐槽有什么不好,很多好东西都是从吐槽开始的,从造纸,蒸汽机,到法兰西第一共和国,再到Linux...). 1.TCP对网络拥塞是基于预测的 TCP属于网络的一部分,这无可厚非,但当一个人说自己精通网络的时候,他更可能的意思是自己精通网络节点的行为而不是端到端的行为.比如,一个Cisco的工程师精通各种路由协议,可以设计出复杂的OSPF

[最短路]P1078 文化之旅

题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一 种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不 同的国家可能有相同的文化.不同文化的国家对其他文化的看法不同,有些文化会排斥外来 文化(即如果他学习了某种文化,则他不能到达排斥这种文化的其他国家). 现给定各个国家间的地理关系,各个国家的文化,每种文化对其他文化的看法,以及这 位使者游历的起点和终点(在起点和终点也会学习当地的文化),国家间的道路距离,试求 从起点到终点最少需

Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作

刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息            使用的Unity版本为5.5,Androad Studio 2.3.1 接下来开始讲具体操作 首先是Androad Studio的基本配置 1.创建工程,空白的就行,反正也用不到界面布局 等待创建完成 2.新建库模块: 切换到Project视图 右击你的项目 新建一个库模块-用来负责与Unity交互 当然你也可以不

企业文化建设

企业文化建设具体的操作办法无非是这样的过程: 1.不管多坏的人,身上总有一些闪光点,企业也一样.所以第一步就是找到企业身上的这些闪光点: 2.把这些闪光点总结成容易传播的词语或句子,比如“艰苦奋斗”.“永不服输”.等: 3.然后在企业的经历中找到可以支撑这些词语或句子的事例,以兹证明: 4.再然后把这些词语.句子.事例有机的安排在一起,配上图片,印成小册子或者放在网上: 5.最后是在所有可能的场合,去传播和推广它,让员工理解.记住,最终深信. 简化: 1.找闪光点 2.总结成文案 3.找事例支撑

JS对select动态添加options操作[IE&FireFox兼容]

<select id="ddlResourceType" onchange="getvalue(this)"> </select> 动态删除select中的所有options: document.getElementById("ddlResourceType").options.length=0; 动态删除select中的某一项option: document.getElementById("ddlResourc

JqGrid相关操作备忘 方法列表

JqGrid相关操作备忘 方法列表 1.获得当前列表行数:$("#gridid").getGridParam("reccount"); 2.获取选中行数据(json):$("#gridid").jqGrid('getRowData', id); 3.刷新列表:$(refreshSelector).jqGrid('setGridParam', { url: ''), postData: ''}).trigger('reloadGrid'); 4.选

SimpleDateFormat格式化日期以及日期的相关操作

一.Java中的日期概述 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题. 在Java中,操作日期主要涉及到一下几个类: 1.java.util.Date 类 Date 表示特定的瞬间,精确到毫秒.从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和分析日期字符串.Date 中的把日期解释为年.月.日.小时.分钟和