nodeJs学习笔记

nodeJs

vscode

换行--LF,与Linux兼容

CommonJS规范

模块加载机制。每个js都是一个模块,它们内部各自使用的变量名和函数名都互不冲突。

一个模块要对外部暴露变量,可以用module.exports=variable;

一个模块要引用其他模块暴露的变量,用var ref=require('module_name');

深入了解模块原理

大量的全局变量会导致变量名冲突问题,Node.js在加载了js模块后,会把代码包装一下,进行闭包,将模块内代码用一个匿名函数包起来,使得原来的全局变量变为局部变量。

module.exports和exports

一般使用module.exports。只有暴露变量是个对象时,exports才能正常输出。故一般用第一种。

原因:module.exports与exports指的是同一个对象。load函数返回的是module.exports。

基本模块

global

唯一的全局对象

process进程

NodeJS进程。

fs模块

node内置的文件系统模块,负责读写文件。

读取文件

异步读取文件
//err--null,data--String;err--错误对象,data--undefined
fs.readFile('./web-practice/node/sample.txt','utf-8',function(err,data){
     if(err){
         console.log(err);
    }else{
         console.log(data);
         // String转Buffer对象;
         var buf=Buffer.from(data,'utf-8');
         console.log(buf);
         // Buffer对象转为String是:data.toString('utf-8');
     }
 })

 

同步读取文件
// 同步读取文件:比起异步,函数多了个Sync后缀,且不接收回调函数,函数直接返回结果。
// 同步读取文件发生错误,则需要用try..catch捕获错误。
try {
    var data = fs.readFileSync('./web-practice/node/sample.txt', 'utf-8');
    console.log(data);
} catch (err) {
     console.log(err);
}

写入文件

异步写入文件
// 异步将数据写入文件fs.writeFile()
// 参数:文件名,数据,回调函数
// 数据:1. String,默认utf-8写入文件;2. Buffer写入的是二进制文件
  var wData="Hello,Node.js";
  fs.writeFile('./web-practice/node/output.txt',wData,function(err){
     if (err) {
         console.log(err);
     }else{
         console.log('success!');
     }
 })

 

同步写入文件
// 同步将数据写入文件 fs.writeFileSync()
var wData2=110011;
fs.writeFileSync('./web-practice/node/output.txt',wData2);
 

 

获取文件信息

异步获取文件信息

stat()

// 如果我们要获取文件大小,创建时间等信息,可以使用fs.stat(),它返回一个Stat对象,能告诉我们文件或目录的详细信息:
fs.stat('./web-practice/node/sample.txt', function (err, stat) {
    if (err) {
        console.log(err);
    } else {
        // 是否是文件:
        console.log('isFile: ' + stat.isFile());
        // 是否是目录:
        console.log('isDirectory: ' + stat.isDirectory());
        if (stat.isFile()) {
            // 文件大小:
            console.log('size: ' + stat.size);
            // 创建时间, Date对象:
            console.log('birth time: ' + stat.birthtime);
            // 修改时间, Date对象:
            console.log('modified time: ' + stat.mtime);
        }
    }
});

 

同步获取文件信息

使用同步或异步

fs模块中,提供同步方法是为了方便使用。那我们到底是应该用异步方法还是同步方法呢?

由于Node环境执行的JavaScript代码是服务器端代码,所以,绝大部分需要在服务器运行期反复执行业务逻辑的代码,必须使用异步代码,否则,同步代码在执行时期,服务器将停止响应,因为JavaScript只有一个执行线程。

服务器启动时如果需要读取配置文件,或者结束时需要写入到状态文件时,可以使用同步代码,因为这些代码只在启动和结束时执行一次,不影响服务器正常运行时的异步执行。

steam

是nodejs提供的一个仅在服务器端可用的模块,支持“流”这种数据结构。

从文件流中读取文本内容

// 1.从文件流中读取文本内容
// 读取数据的流都继承自stream.Readable
// data事件可能有多次,每次传递的chunk是流的一部分数据。
var rs=fs.createReadStream('./web-practice/node/sample.txt','utf-8');
rs.on('data',function(chunk){
    console.log('DATA:');
    console.log(chunk);
});
​
rs.on('end',function(){
    console.log('END');
});
​
rs.on('error',function(err){
    console.log('ERROR:'+err);
});

 

以流的形式写入文件

// 2. 以流的形式写入文件
// 写入的流都继承自stream.Writable
var ws=fs.createWriteStream('./web-practice/node/output.txt','utf-8');
ws.write('使用流将数据写入文本\n');
ws.write('END');
ws.end();

pipe

就像可以把两个水管串成一个更长的水管一样,两个流也可以串起来。一个Readable流和一个Writable流串起来后,所有的数据自动从Readable流进入Writable流,这种操作叫pipe

在Node.js中,Readable流有一个pipe()方法,就是用来干这件事的。故,这实际上是一个复制文件的程序。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值