node数据转换
string(或json字符串)转 stream
1 2 3 4 5 6
| function createStream (str) { const rv = new PassThrough() rv.push(str) rv.push(null) return rv }
|
buffer 转 stream
1 2 3 4 5 6 7
| let Duplex = require('steam').Duplex function bufferToStream() { let stream = new Duplex() stream.push(buffer) stream.push(null) return stream }
|
string(或json字符串)转 buffer
stream 转 buffer
1 2 3 4 5 6 7 8 9 10 11 12
| function (){ return new Promise((resolve, reject) => { let = buffers = [] stream.on('error', reject) stream.on('data', data => { return buffers.push(data) }) stream.on('end', () => { resolve(Buffer.concat(buffers)) }) }) }
|
buffer 转 string(或json对象)
1 2 3 4
| const bigBuf = Buffer.concat(bufferArray) const str = bigBuf.toString()
const jsonObj = JSON.parse(str)
|
stream 转json
见上述两者之和
或
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| const fs = require('fs'); const readStream = fs.createReadStream('./test.txt');
let data = ''; readStream.setEncoding('utf8'); readStream.on('data', function(chunk){ data+=chunk; }); readStream.on('end', function(){ console.log(data); console.log('流读取结束'); }); readStream.on('error', function(err){ console.log(err); }); console.log('执行结束!');
const fs = require('fs');
const writeStream = fs.createWriteStream('./test.txt',{'flags':'a'}); let data = '测试内容!!!'; writeStream.write(data, 'utf8'); writeStream.end();
writeStream.on('finish', function(){ console.log('写入结束!'); }); writeStream.on('error', function(err){ console.log(err); }); console.log('执行结束!!!!!');
|
blob 转 string(或json对象)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const mediaResponse = await fetch(url) const data = await mediaResponse.arrayBuffer() const buf = await importKeyAndDecrypt(key, data, iv) const reader = new FileReader reader.onload = async () => { elementInfoSrc.value = (await reader.result) as string } reader.readAsDataURL(new Blob([buf]))
const reader = new Reader() reader.readAsText(response, 'utf-8') reader.onload = () => { const str = reader.result const json = JSON.parse(str) }
|
其它API介绍
FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。
Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。Blob 表示的不一定是 JavaScript 原生格式的数据。File 接口基于 Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。
ArrayBuffer 对象代表储存二进制数据的一段内存,它不能直接读写,只能通过视图(TypedArray 视图和 DataView 视图)来读写,视图的作用是以指定格式解读二进制数据。
Uint8Array 对象是 ArrayBuffer 的一个数据类型(8 位不带符号整数)。
TextEncoder 接受代码点流作为输入,并提供 UTF-8 字节流作为输出。
TextDecoder 接口表示一个文本解码器,一个解码器只支持一种特定文本编码,例如 utf-8、iso-8859-2、koi8、cp1261,gbk 等等。解码器将字节流作为输入,并提供代码点流作为输出。
注意: 二进制数组并不是真正的数组,而是类似数组的对象。
字符与ArrayBuffer,Uint8Array相互转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
let encoder = new TextEncoder();
let uint8Array = encoder.encode("你好啊");
let arrayBuffer = uint8Array.buffer
let str = 'hello,你好吗?' let blob = new Blob([str],{type:'text/plain;charset=utf-8'}); let utf8decoder = new TextDecoder() blob.arrayBuffer().then(buffer=>{ console.log(buffer) let text = utf8decoder.decode(buffer) console.log(text) })
let str = 'hello,你好吗?' let blob = new Blob([str],{type:'text/plain;charset=utf-8'}); let utf8decoder = new TextDecoder() let fr = new FileReader() fr.readAsArrayBuffer(blob) fr.onload = function(res) { let buffer = fr.result console.log(buffer) let text = utf8decoder.decode(buffer) console.log(text) }
|