内容

视频

第四章内容

菜鸟教程服务器

//复制文件
function de(x) {
console.log(x);
}
var fs=require('fs');
fs.mkdir('stuff',function () {
fs.readFile('readme.txt',function (err,data) {
de(data);
fs.writeFile('./stuff/writeme.txt',data,function () {
de('copy sucessfully');
});
}) ;
});
//del
function de(x) {
console.log(x);
}
var fs=require('fs');
fs.unlink('./stuff/readme.txt',function () {
de('del sucessfully');
})
//返回一个html页面
res.writeHead(200,{'Content-Type':'text/html'});
var myReadStream=fs.createReadStream('sample.html','utf8');
myReadStream.pipe(res);
//创建路由的方法
console.log(req.url);
if(req.url==='/'||req.url==='/home')
{
res.writeHead(200,{'Content-Type':'text/html'});
var myReadStream=fs.createReadStream('sample.html','utf8');
myReadStream.pipe(res);
}
else if(req.url==='/devilman')
{
res.writeHead(200,{'Content-Type':'application/json'});
var jsonobj={
name:'devilman',
atk:2000,
def:1500
};
res.end(JSON.stringify(jsonobj));
}
else {
res.writeHead(404,{'Content-Type':'text/html'});
var myReadStream=fs.createReadStream('404.html','utf8');
myReadStream.pipe(res);
}

HTTP状态码

200 一切正常

301 请求的URL已经被移走

400 请求的格式是无效的

401 客户端没有权限

403 服务器拒绝这个请求

404 Not Found

500 状态不一致,出现bug

503 运行时的错误

//substr方法左闭右开

EventEmitter

//once(event, listener)
为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。
server.once('connection', function (stream) {
console.log('Ah, we have our first user!');
});
//removeListener(event, listener)
移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。
它接受两个参数,第一个是事件名称,第二个是回调函数名称。 var callback = function(stream) {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
//removeAllListeners([event])
移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。
//setMaxListeners(n)
默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于提高监听器的默认限制的数量。
//listeners(event)
返回指定事件的监听器数组。
//emit(event, [arg1], [arg2], [...])
按参数的顺序执行每个监听器,如果事件有注册监听返回 true,否则返回 false。

Buffer

JS只有String类型,没有二进制数据类型,特此有一个Buffer类来存放二进制数据

const buf=Buffer.from('runoob','ascii');
console.log(buf.toString('utf8'));
// 创建一个长度为 10、且用 0 填充的 Buffer。
const buf1 = Buffer.alloc(10); // 创建一个长度为 10、且用 0x1 填充的 Buffer。
const buf2 = Buffer.alloc(10, 1); // 创建一个长度为 10、且未初始化的 Buffer。
// 这个方法比调用 Buffer.alloc() 更快,
// 但返回的 Buffer 实例可能包含旧数据,
// 因此需要使用 fill() 或 write() 重写。
const buf3 = Buffer.allocUnsafe(10); // 创建一个包含 [0x1, 0x2, 0x3] 的 Buffer。
const buf4 = Buffer.from([1, 2, 3]); // 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。
const buf5 = Buffer.from('tést'); // 创建一个包含 Latin-1 字节 [0x74, 0xe9, 0x73, 0x74] 的 Buffer。
const buf6 = Buffer.from('tést', 'latin1');
buf=Buffer.alloc(256);
len=buf.write('fym is tianxiadiyi');
console.log('写入的字节数'+len);
buf=Buffer.alloc(26);
for(var i=0;i<26;i++)
{
buf[i]=i+97;
}
de(buf.toString('ascii'));
de(buf.toString('ascii',0,5));//abcde
//转成JSON文件
const buf=Buffer.from([0x1,0x2,0x3,0x4,0x5]);
const json=JSON.stringify(buf);
de(json);//{"type":"Buffer","data":[1,2,3,4,5]}
//Buffer合并
var buffer1 = Buffer.from(('菜鸟教程'));
var buffer2 = Buffer.from(('www.runoob.com'));
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log("buffer3 内容: " + buffer3.toString());
//Buffer比较
//有一个length函数记录长度
var buf1 = Buffer.from('abcdefghijkl');
var buf2 = Buffer.from('RUNOOB');
//将 buf2 插入到 buf1 指定位置上
buf2.copy(buf1, 2);
console.log(buf1.toString());//abRUNOOBijkl
//Buffer裁剪
var buffer1 = Buffer.from('runoob');
// 剪切缓冲区
var buffer2 = buffer1.slice(0,2);
console.log("buffer2 content: " + buffer2.toString());

Stream

//读入流
var fs=require('fs');
var data='';
var rst=fs.createReadStream('gou.txt');
rst.setEncoding('utf8');
rst.on('data',function (chunk) {
data+=chunk;
});
rst.on('end',function () {
de(data);
});
rst.on('error',function (err) {
de(err.stack);
});
de('fuck');
//写流
var fs = require("fs");
var data = '菜鸟教程官网地址:www.runoob.com';
// 创建一个可以写入的流,写入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt');
// 使用 utf8 编码写入数据
writerStream.write(data,'UTF8');
// 标记文件末尾
writerStream.end();
// 处理流事件 --> data, end, and error
writerStream.on('end', function() {
console.log("写入完成。");
}); writerStream.on('error', function(err){
console.log(err.stack);
}); console.log("程序执行完毕");
//管道流 从文件传到另一个文件
var fs = require("fs");
// 创建一个可读流
var readerStream = fs.createReadStream('input.txt');
// 创建一个可写流
var writerStream = fs.createWriteStream('output.txt');
// 管道读写操作
// 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
readerStream.pipe(writerStream); console.log("程序执行完毕")
//压缩
var fs = require("fs");
var zlib = require('zlib'); // 压缩 input.txt 文件为 input.txt.gz
fs.createReadStream('gou.txt')
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('gou.txt.gz')); console.log("文件压缩完成。");
//解压
var fs = require("fs");
var zlib = require('zlib'); // 解压 input.txt.gz 文件为 input.txt
fs.createReadStream('input.txt.gz')
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('input.txt')); console.log("文件解压完成。");

模块

有关循环调用

node自带防止循环调用的机制,实在是强,先初始化,最后再生效

if(typeof d=='string');//判断弱变量的变量类型
要将buf转换成字符串,需要用到toString的方法
buff.fill("\0")清零的方法

根据扩展名返回不同类型文件

function content_distribution(file) {
var ext=path.extname(file);
switch (extname.toLowerCase()) {
case '.html':return "text/html";
case '.css': return "text/css";
case '.jpg'return "image/jpeg";
default return "text/plain";
}
}

node学习笔记(二)流和缓冲区的更多相关文章

  1. node学习笔记(二)

    process.stdout(); //标准输出流 process.stdout.write() //提供了比console.log更底层的接口 process.stdin(); //标准输入流 // ...

  2. JAVA NIO学习笔记二 频道和缓冲区

    Java NIO 频道 Java NIO渠道类似于流,他们之间具有一些区别的: 您可以读取和写入频道.流通常是单向(读或写). 通道可以异步读取和写入数据. 通道常常是读取或写入缓冲区. 如上所述,您 ...

  3. java8新特性学习笔记(二) 流的相关思想

    流是什么 流是Java API的新成员,他允许你以声明的方式处理数据集合,就现在来说,可以把他们看成遍历数据集合的高级迭代器.此外,流还可以透明地并行处理,你无须写任何多线程代码. 下面例子是新老AP ...

  4. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  5. Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  6. Linux内核学习笔记二——进程

    Linux内核学习笔记二——进程   一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...

  7. amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules

    amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules 一.总结 1.见名知意:见那些class名字知意,见函数名知意,见文件名知意 例如(HISTORY.md Web 组件更新历史 ...

  8. Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer

    作者:Grey 原文地址:Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer ByteBuffer.allocate()与ByteBuffer.allocateD ...

  9. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

随机推荐

  1. Hadoop3.1.2 + Hbase2.2.0 设置lzo压缩算法

    Hadoop3.1.2 + Hbase2.2.0 设置lzo压缩算法: 写在前面,在配置hbase使用lzo算法时,在网上搜了很多文章,一般都是比较老的文章,一是版本低,二是一般都是使用hadoop- ...

  2. JDK8的JVM内存结构,元空间替代永久代成为方法区及常量池的变化

    JVM的知识这里总结的很详细:https://github.com/doocs/jvm/blob/master/README.md,因此在本博客也不会再对其中的东西重复总结了. 现在很多文章关于JVM ...

  3. Team Train Recorder

    2014-2015 Petrozavodsk Winter Training Camp, Contest.58 (Makoto rng_58 Soejima contest) contest link ...

  4. CodeForces 939E Maximize

    Maximize 题意:整个程序有2种操作,操作1将一个元素放入集合S中,且保证最新插入的元素不小于上一次的元素, 操作2 找到集合S中的某个子集合, 使得 集合中最大的元素减去平均数的值最大. 题解 ...

  5. Integer和Integer常量池

    Integer中有个静态内部类 IntegerCache ,里面有个cache[],也就是Integer常量池  大小为一个字节(-128-127). (jdk1.8.0_101)源码 private ...

  6. 阿里云 centos7 64位搭建JAVA环境-----安装JDK(2)

    mysql安装好以后,把jdk环境配置一下. 首先下载jdk 8,在官网下载. 找到链接 http://download.oracle.com/otn-pub/java/jdk/8u171-b11/5 ...

  7. Jmeter安装图文及入门教程

    一.JMeter介绍 JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域.它可以用于测试静态和动态资源,例如 ...

  8. FJUT2019暑假周赛三部分题解

    A本来想改到q<1e5,让你们预处理的,然后想了哈作为个逆元模板题吧= =,做不出来自行反思. B贴个题面 因为只有一次机会,那么也就是两点分布期望E = p了,先说说大家的做法,先求出每个n的 ...

  9. PythonI/O进阶学习笔记_6.对象引用,可变性和垃圾回收

    前言: 没有前言了- -......这系列是整理的以前的笔记上传的,有些我自己都忘记我当时记笔记的关联关系了. 记住以后 笔记记了就是用来复习的!!!不看不就啥用没了吗!!! content: 1.p ...

  10. 装系统------- 了解常用的启动方式以及如何进入bios

    1.从硬盘启动:这种方式提供了最简单的维护解决方案,其基本原理就是增加一个系统的开机启动项,每次开机的时候您都可以选择是进入本地系统还是进入PE. 安装程序并不将PE的启动项作为默认启动项,而是提供一 ...