龙空技术网

关于使用nodejs中的fs模块的一点思考

重庆源码时代 112

前言:

现在你们对“fsnodejs”大概比较关心,咱们都想要了解一些“fsnodejs”的相关内容。那么小编也在网摘上网罗了一些对于“fsnodejs””的相关资讯,希望姐妹们能喜欢,看官们一起来了解一下吧!

起因:在使用fs-extram模块中,使用了fse.readFileSync api,发现需要传入两个参数,一个是路径,另一个是编码模式,传入的是"utf-8"。好奇为什么需要传入utf-8,于是有了下面的事情。

1.首先去查看了一些有关文件系统的资料,发现文件系统在很大程度上依赖操作系统。结果是大概明白文件系统是联系软件存储与硬件存储的系统。

2.之后对编码模式Unicode进行了一个查阅,理解了utf-8是Unicode的一种编码模式。搞清楚了Unicode码点在utf-8下的编码模式下与字节内容的对用关系。如U+0080在utf-8下对应的C2 80.

3.在fse.readFileSync未传入utf-8的情况下,其返回值是一个buffer,包含了读取文件的内容所对应的utf-8下字节内容。

基于这个现象,产生了一个疑问,就是我们通过文件去读取数据,或者向文件中写入数据的时候为什么不能直接使用js的string类型?而是一定要带上编码类型utf-8?经过上面的前置知识积累,可以初步得出结论。

结论:事实上,文件系统是与操作系统相关的,而文件在软件层面上看,是保存在操作系统给文件系统的虚拟内存中。而在计算机的世界中,数据只有二进制数据最后是能够被操作系统与硬件进行通信的,也就是说,我们的文件以及文件中的内容都是以二进制去存储的。

那么在向文件中去读取文件中的内容,或者向文件中写入内容的时候一定是通过字节中的二进制数据来表述文件中的内容。至于这些数据如何与文件中的内容对应起来,这就需要Unicode的编码模式,将字节中的二进制数据与内容对应起来,这样就可以实现内容与字节中的二进制数据之间的转换。

另外也查看了下nodejs中fs.createReadStream去读文件中的内容与fs.readFileSync的区别,发现在处理文件系统的问题时,同时也引入了stream的概念,从别处看到说是stream是对输入输出设备的一种抽象,通过stream的方式去处理输入输出的问题,可能会更好一些。

标签: #fsnodejs