Node基础初始(1)

本文介绍了Node.js中关于文件和路径的操作方法,包括Buffer缓冲区的使用、路径模块(path)的功能如路径拼接(join)、标准化(normalize)、解析(parse)及格式化(format),以及文件系统的API如文件读写(read/write)、追加(append)和状态检查(stat)等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

node

buffer缓冲区

// let buf = new Buffer(5);
// let buf = new Buffer('abc');//<Buffer 61 62 63>  97 98 99
// let buf = new Buffer([1,2,3]);
// let buf1 = new Buffer(buf);
// console.log(buf1);

不推荐new的方式产生实例,推荐静态方法生成实例

// let buf = Buffer.alloc(5);//<Buffer 00 00 00 00 00>
// console.log(buf);

// let buf = Buffer.from('abc');
// console.log(buf);
  • byteLength
// const str = '\u00bd + \u00bc = \u00be';
// let ret = Buffer.byteLength(str,'ascii');//统计特定编码下字符串对应的字节数
// console.log(ret,str);
  • isBuffer
// let buf = Buffer.alloc(5);
// console.log(Buffer.isBuffer(buf));//判断参数中的数据是否为Buffer实例
// console.log(Buffer.isBuffer('abc'));
  • isEncoding
// console.log(Buffer.isEncoding('base64'));//判断Buffer是否支持该编码
  • write
// buf.write(string[, offset[, length]][, encoding])
/*
    参数一:要写入buf的字符串
    参数二:开始写的位置
    参数三:写入的长度
    参数四:编码形式
*/
// let buf = Buffer.alloc(5);
// buf.write('abc',2,2,'utf8');//向Buffer实例中写入数据
// console.log(buf);
  • equals
// let buf1 = Buffer.from('abc');
// let buf2 = Buffer.from('abcd');
// console.log(buf1.equals(buf2));//判断两个Buffer实例是否相等
  • indexOf
// const buf = Buffer.from('this is a buffer');
// console.log(buf.indexOf('buffer'));//检索特定字符串在整个Buffer中的位置
  • slice
let buf = Buffer.from('abcde');
console.log(buf.slice(2,5));//截取Buffer实例的一部分,生成一个新的Buffer实例

path

  • basename
// 截取路径中的文件名
// let ret = path.basename('/foo/bar/baz/asdf/quux.html');
// let ret = path.basename('/foo/bar/baz/asdf/quux.html', '.html');//省略文件格式后缀
// console.log(ret);
  • parse
// parse把字符串形式的路径转化为对象形式
// let obj = path.parse('/home/user/dir/file.txt');
// console.log(obj.base);
// { root: '/',
//   dir: '/home/user/dir',
//   base: 'file.txt',
//   ext: '.txt',
//   name: 'file' 
// }
  • format
// format把对象形式的路径转化为字符串形式
// let str = path.format(obj);
// console.log(str);//  /home/user/dir\file.txt
  • normalize
// normalize标准化路径
// let str = path.normalize('C:\\temp\\\\foo\\bar\\..\\');
// console.log(str);// C:\temp\foo\
  • join(常用)
// join用来拼接路径
// let str = path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// let str = path.join(__dirname,'./README.md');//C:\Users\www\Desktop\Nodejs\代\nodejs\day03\README.md
// console.log(str);// \foo\bar\baz\asdf
  • relative
// 计算相对路径
// let str = path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb');
// console.log(str);// ..\..\impl\bbb
  • resolve
// 解析绝对路径
// let str = path.resolve('/foo/bar', '/tmp/file/');
// console.log(str);//C:\tmp\file

file

require 依赖请求

const path = require('path');
const fs = require('fs');

stat

// 查看文件的状态信息(异步操作)
fs.stat(path.join(__dirname,'./data.txt'),(err,stats)=>{
    console.log(err);
    // console.log(stats);
    // console.log('atime:访问时间' + stats.atime);
    // console.log('mtime:内容修改时间' + stats.mtime);
    // console.log('ctime:文件状态修改时间' + stats.ctime);
    // console.log('btime:创建时间' + stats.birthtime);
    console.log(stats.isFile());//判断是否为文件
    console.log(stats.isDirectory());//判断是否为路径
    console.log(2);
});
console.log(3);

由于提到了异步操作
    浏览器中的异步操作:
    1、定时函数(达到延时事件)
    2、事件函数(特定的事件触发)
    3、ajax回调函数(服务器数据相应的时候)

    异步任务触发条件:
    1、主线程空闲
    2、满足任务的触发条件

    js的运行是单线程的

    单线程+事件队列


// console.log(11);
// // 同步操作
// let ret = fs.statSync(path.join(__dirname,'data.txt'));
// console.log(ret);
// console.log(333);

stats 状态


 fs.stat(path.join(__dirname,'data.txt'),(err,stats) => {
     console.log(stats);
     if(!err && stats.isFile()){
         console.log('该文件存在');
     }else{
         console.log('该文件不存在');
     }
 });

文件操作

open:


/*
    文件操作
    fs.open(path, flags[, mode], callback)
    path  文件的路径
    flags  打开文件的方式   r-- w --
    mode  Linux平台有效,可以控制文件的读、写、可执行 777,参数是可选的
    callback 回调函数(err,fd)
*/

fd:

// fs.open(path.join(__dirname,'./data.txt'),'r',(err,fd) => {
//     // fd file discriptor 文件描述符,通过fd可以操作文件,默认从3开始,打开多次接着累加
//     if(err){
//         console.log(err);
//         return;
//     }
//     console.log(err,fd);
// });

// 同步方法的返回值表示fd
let ret = fs.openSync(path.join(__dirname,'./data.txt'),'r');
console.log(ret);

read:

    文件读操作
    fs.read(fd, buffer, offset, length, position, callback)
    fd 文件描述符
    buffer 读取的数据放到buffer中
    offset 读取的数据从buffer的第几个位置开始写
    length 读取文件中数据的字节数量
    position 从文件的什么位置开始读
    callback 回调函数(err,bytes,buffer)
const path = require('path');
const fs = require('fs');

// fs.open(path.join(__dirname,'./data.txt'),'r',(err,fd) => {
//     let buf = Buffer.alloc(5);
//     fs.read(fd,buf,1,3,null,(err,bytes,buffer) => {
//         console.log(err,bytes,buffer);//bytes表示读取的字节数量
//         console.log(buf);//读取的文件内容
//         console.log(buf == buffer);//buffer和read参数中的buf是同一份数据
//     });
// });

//同步操作
let fd = fs.openSync(path.join(__dirname,'./data.txt'),'r'); 
let buf = Buffer.alloc(5);
let ret = fs.readSync(fd,buf,0,4);
console.log(ret,buf);

write:

    文件写操作(浏览器中的js和Node.js中的js语法上都不支持方法重载,但是可以在定义函数时,根据参数的个数,和函数的类型进行判断,从而根据实参形式上的差别来区分实际的调用形式)
    fs.write(fd, buffer, offset, length[, position], callback)
    fs.writeSync(fd, buffer, offset, length[, position])

    fs.write(fd, data[, position[, encoding]], callback)
    fs.writeSync(fd, data[, position[, encoding]])
const path = require('path');
const fs = require('fs');
// 方法重载(方法名称相同,但是参数的个数不同,参数的类型不同)
// fs.open(path.join(__dirname, './data.txt'), 'w', (err, fd) => {
//     let buf = Buffer.from('中国');
//     // written指的是字节数量,而不是字符数量
//     fs.write(fd,buf,0,6,(err,written,buffer) => {
//         console.log(err,written,buffer);
//         console.log(buf === buffer);
//     });
// });

// fs.open(path.join(__dirname, './data.txt'), 'w', (err, fd) => {
//     // let buf = Buffer.from('中国');
//     fs.write(fd,'程序员',(err,written,str) => {
//         console.log(err,written,str);
//     });
// });

//tongbu
// let fd = fs.openSync(path.join(__dirname, './data.txt'), 'w');
// let buf = Buffer.from('中国');
// // let ret = fs.writeSync(fd,buf,0,6,null);
// let ret = fs.writeSync(fd,'程序员');
// console.log(ret);

readFile:

   文件读操作
    fs.readFile(file[, options], callback)
    file 表示文件名称或者文件描述符
    options 可以是字符串形式,表示编码;可以是对象形式(encoding,flag)
    callback 回调函数(err,data 实际读取的数据)

    fs.readFileSync(file[, options])
// 第二个参数指定编码,回调函数中的data是字符串,不指定的是Buffer
// fs.readFile(path.join(__dirname,'./data.txt'),(err,data)=>{
//     console.log(data.toString());
// });

// fs.readFile(path.join(__dirname,'./data.txt'),'utf8',(err,data)=>{
//     console.log(data);
// });

// let content = fs.readFileSync(path.join(__dirname,'./data.txt'),'utf8');
let content = fs.readFileSync(path.join(__dirname,'./data.txt'));
console.log(content);

writeFile:

    文件写操作
    fs.writeFile(file, data[, options], callback)
    data 写入的数据

    fs.writeFileSync(file, data[, options])
const path = require('path');
const fs = require('fs');

// fs.writeFile(path.join(__dirname,'./data.txt'),'hi',(err)=>{
//     console.log(err);
// });

fs.writeFileSync(path.join(__dirname,'./data.txt'),'中国');

appendFile:

   文件内容追加
    fs.appendFile(file, data[, options], callback)

    fs.appendFileSync(file, data[, options])
const path = require('path');
const fs = require('fs');

// fs.appendFile(path.join(__dirname,'./data.txt'),'程序员',(err)=>{
//     console.log(err);
// });

fs.appendFileSync(path.join(__dirname,'./data.txt'),'程序员');
内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真和实验验证了稳定性和综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制类、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化和自适应控制等性能提升策略,更全面地反映了群体智能协作和性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员和工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析和仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解和分析系统性能。通过阅读和实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值