大文件操作
预计阅读时间: 6 分钟打开与关闭操作
我们要先来说一下文件的打开与关闭操作,之前我们使用 readFile 与 writeFile 时,已经可以实现文件的读写操作了,既然可以实现文件内容的读取,那就肯定也包含了文件的打开,那为什么 nodejs 还要专门去提供一个单独的打开操作呢?原因也非常简单,因为 readFile 与 writeFile 的工作机制是将文件里的内容一次性的全部读取,或者说写入到内存里,而这种方式对于大体积的文件来讲,显然那是不合理的,因此我们后期需要一种可以实现边读边写,又或者说是边写边读的操作方式,这时我们就应该去将文件的打开读取,写入和关闭去看作是各自独立的环节,所以也就有了 open 与 close。
open
close
有打开的情况下,我们就对应的会有一个关闭,对一个文件操作完成之后,就跟数据库是一样的,我们应该把这个所占用的资源链接给它释放掉,所以这个时候的话我们就应该去考虑一下如何关闭文件,那这里边 nodejs 又提供了一个 close api,我们的关闭行为,一般都是要建立在我们打开这样一个操作之后的。
读写操作
我们通过一张图示来进行简单的说明。

这里我们还是假定数据的传输场景就是磁盘的读写,所以 a 文件中的数据如果要想拷贝至 b 文件当中,默认情况下是需要内存来作为中转的,当然如果是一次性的操作,那么就会存在内存占满并且溢出的潜在问题,因此我们更喜欢的是用一个中间暂存区来一点一点的读取,然后再一点一点的写入,而这个中间暂存区就是之前我们所提到的 buffer。
read 操作
准备一个 text.txt 写入 1234567890 用于测试。
write 操作
自定义文件拷贝操作
默认情况下 nodejs 中已经提供了 copyFile 这样的一个 api,但是这个行为是基于 readFile 和 writeFile 的一次性读写操作,针对于大体积的文件来说,它是不合适的,因此这里我们就利用上面的文件读写操作的几个 api 来完成一个拷贝行为,从而让我们可以方便地去处理大文件的拷贝。