Node.js的学习笔记2——Buffer、文件系统

Buffer缓冲区

Buffer和数组的结构的非常类似,Buffer是用来存储二进制数据的

		var str = "Hello 缓冲区"
		var buf = Buffer.from(str)
		console.log(buf) //<Buffer 48 65 6c 6c 6f 20 42 75 66 66 65 72>
		console.log(str.length) //字符串的长度:9
		console.log(buf.length) //占用内存的多少:15
		console.log(buf.toString()) //Hello 缓冲区

在Buffer中存储的都是二进制数据,但是在显示时都是以十六进制[00-FF]的形式显示。buf.toString()将缓冲区的数据转换成字符串。

Buffer.alloc(size)
		//创建一个大小为3字节的Buffer
		var buf2 = Buffer.alloc(3)
		buf2[0] = 255 //1. <Buffer ff 00 00>
		buf2[1] = 0xaa //1. <Buffer ff aa 00>
		buf2[3] = 255 //2. <Buffer ff aa 00>
		buf2[2] = 666 //3. <Buffer ff aa 9a>
		console.log(buf2[1]) //170
		console.log(buf2[1].toString(16)) //aa
  1. 输入的数字(十进制)需转成十六进制显示,也可直接输入十六进制。
  2. Buffer的大小一旦确定则不能修改,Buffer实际上是对底层内存的直接操作。
  3. 若输入的十进制超过255,此时的666的二进制为1010011010,取后八位10011010,转为十六进制9A。
  4. 数字在控制台或页面输出转成十进制。也可以认为转换成十六进制输出。
Buffer.allocUnsafe(size)

在性能上比Buffer.alloc(size)更优,但其包含敏感数据

		var buf3 = Buffer.allocUnsafe(3)
		console.log(buf3)//<Buffer f0 d3 1f>

文件系统

同步(异步)写入/读取文件
  1. 打开文件
    同步:fs.openSync(path[, flags, mode])
    异步:fs.open(path, flags[, mode], callback)
  • path:文件的路径;flags:文件操作的类型(r-只读,w-可写)
  • 返回文件描述符
  1. 写入/读取文件
    同步:fs.writeSync(fd, string[, position[, encoding]])/fs.readSync(fd, buffer, offset, length, position)
    异步:fs.write(fd, string[, position[, encoding]], callback)/fs.read(fd, buffer, offset, length, position, callback)
  • fd:文件描述符;string:写入内容;position:起始位置;
  1. 关闭文件
    同步:fs.closeSync(fd)
    异步:fs.close(fd, callback)
		/**
		 *     同步文件写入/读取
		 */
		var fs = require('fs')
		    //打开文件
		var fd = fs.openSync("hellofs.txt", 'w')
		    //向文件中写入内容
		fs.writeSync(fd, "这是同步文件写入的内容")
		    //关闭文件
		fs.closeSync(fd)
		/**
		 *     异步文件写入
		 */
		var fs = require('fs')
		    //打开文件
		fs.open("hellofs2.txt", "w", function(err, fd) {
		    //判断是否打开文件
		    if (!err) {
		        //向文件中写入内容
		        fs.write(fd, "这是异步文件写入的内容", function(err) {
		            if (!err) {
		                console.log("写入成功!")
		            }
		            //关闭文件
		            fs.close(fd, function(err) {
		                if (!err) {
		                    console.log("文件已关闭!");
		                }
		            })
		        })
		    } else {
		        console.log(err)
		    }
		})
简单文件写入/读取

同步:fs.writeFileSync(file, data[, options])/fs.readFileSync(path[, options])
异步:fs.writeFile(file, data[, options], callback)/fs.readFile(path[, options], callback)

		/**
		 *     简单文件写入/读取
		 */
		var fs = require('fs')
		路径可为绝对路径
		fs.writeFile("hellofs3.txt", "这是简单文件写入的内容", {
		    flag: "a"
		}, function(err) {
		    if (!err) {
		        console.log("写入成功")
		    } else {
		        console.log(err)
		    }
		})
		
		fs.readFile("hellofs3.txt", function(err, data) {
		        if (!err) {
		            console.log(data) //data以Buffer的形式输出,可能是音频、图片
		                //将data写入另一个文件中
		            fs.writeFile("hellofs4.txt", data, function(err) {
		                if (!err) {
		                    console.log("文件写入成功")
		                }
		            })
		        }
		    })
流式文件写入/读取

fs.createReadStream(path[, options])/fs.createWriteStream(path[, options])

		/**
		 *     流式文件写入/读取
		 */
		var fs = require('fs')
		var rs = fs.createReadStream("hellofs4.txt")
		var ws = fs.createWriteStream("hellofs5.txt")
		//pipe()可以将可读流中的内容,直接输出到可写流中
		rs.pipe(ws)

猜你喜欢

转载自blog.csdn.net/xicc1112/article/details/104711114