3 Star 0 Fork 0

Gitee 极速下载 / oput

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/langhuihui/oput
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

0 put do 零存整取库

codecov

该库旨在解决js需要缓存内存块来解决接收不定长度的数据,取出不定长度的数据的问题。例如tcp的粘包问题。

典型需求

接收一个远程请求,不断接收到不定长度的数据,然后根据协议解析到长度字段,然后读取一段长度来解包,此时可能缓存不够,需要等待继续接收数据,如果缓存够了,则读取长度后,需要修改缓存为剩余的数据

用核酸筛查来比喻,陆续有人来排队,需要排满10人为一组进行采样。

安装

$ npm install oput

使用

分成生产端和消费端,生产端负责向OPut中写入数据(TypedArray或者ArrayBuffer)。

import OPut from 'oput'
const oput = new OPut(reader)
oput.write(new Uint32Array([1,2,3]))

可以在pipeTo中使用

import OPut from 'oput'
const oput = new OPut(reader)
readableStream.pipeTo(new WritableStream(oput))

消费端负责从OPut中读取数据。根据实际需要可以选择两种读取模式。

模式一:按字节数读取,返回缓冲中头部N个字节的数据

读取出来的是Uint8Array对象,要及时处理,后续读取出的数据会覆盖前面的数据。

function *reader(){
  let b = yield 5;//读取5个字节
  console.log(b[0])
}

模式二:向生产者提供TypedArray对象,接收数据

可以自行选择是否复用TypedArray对象

function *reader(){
  let b = new Uint8Array(5);
  yield b;//填充到b中
  console.log(b[0])
  b = new Uint32Array(5);
  yield b;//填充到b中,又读取了20个字节
  console.log(b[0])
}

模式三:通过异步read方式读取数据

  const oput = new OPut();
  oput.write(new Uint32Array([1, 2]));
  oput.write(new Uint32Array([1, 2]));
  oput.read(1).then(value=>{
    expect(value[0]).toBe(1)
    return oput.read(4)
  }).then(value=>{
    expect(value[3]).toBe(2)
  })

空文件

简介

oput 是一个用于前端读取预定长度数据的工具库,相当于零存整取(0 put do) 零存代表,异步获取到的数据是零碎的,且长度不确定(例如tcp流的数据) 整取代表,需要读取的数 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
HTML/CSS
1
https://gitee.com/mirrors/oput.git
git@gitee.com:mirrors/oput.git
mirrors
oput
oput
main

搜索帮助