npm package: @stream-toolbox/zero
Description: Create a readable stream that will continuously generate data, somewhat similar to /dev/zero, but with some extra features.
Author: haochuan9421
Latest version: 1.0.0

# @stream-toolbox/zero

<p>
    <a href="https://www.npmjs.com/package/@stream-toolbox/zero" target="_blank"><img src="https://img.shields.io/npm/v/@stream-toolbox/zero.svg?style=for-the-badge" alt="version"></a>
    <a href="https://npmcharts.com/compare/@stream-toolbox/zero" target="_blank"><img src="https://img.shields.io/npm/dm/@stream-toolbox/zero.svg?style=for-the-badge" alt="downloads"></a>
    <a href="https://github.com/haochuan9421/stream-toolbox/blob/master/packages/zero/LICENSE" target="_blank"><img src="https://img.shields.io/npm/l/@stream-toolbox/zero.svg?style=for-the-badge" alt="license"></a>
    <a href="https://github.com/haochuan9421/stream-toolbox/tree/master/packages/zero" target="_blank"><img src="https://img.shields.io/node/v/@stream-toolbox/zero.svg?style=for-the-badge" alt="node-current"></a>
    <a href="https://github.com/haochuan9421/stream-toolbox" target="_blank"><img src="https://img.shields.io/badge/stream--toolbox-%F0%9F%A7%B0-orange?style=for-the-badge"></a>
</p>

[English](#installation) [中文文档](#安装)

---

> 🚰 Create a [readable stream](https://nodejs.org/api/stream.html#readable-streams) that will continuously generate data, somewhat similar to [/dev/zero](https://en.wikipedia.org/wiki//dev/zero), but with some extra features.

## Installation

```bash
npm i @stream-toolbox/zero
```

## Quick Start

Create a 1GB size readable stream:

```js
const createZero = require("@stream-toolbox/zero");

const readable = createZero(1073741824); // 1073741824 bytes
let total = 0;
readable
  .on("data", (chunk) => {
    total += chunk.length;
  })
  .on("end", () => {
    console.log(total); // 1073741824
  });
```

> The generation speed is about 12GB/s, and the data is directly from [Buffer.allocUnsafe](https://nodejs.org/api/buffer.html#static-method-bufferallocunsafesize). Note that the data generated by `Buffer.allocUnsafe` is uninitialized (not zeroed-out), this may have some [security risks](https://nodejs.org/api/buffer.html#what-makes-bufferallocunsafe-and-bufferallocunsafeslow-unsafe).

Create a 1MB size readable stream, every byte is `97` (`01100001`):

```js
const createZero = require("@stream-toolbox/zero");

const readable = createZero(1048576, 97);
readable.on("data", (chunk) => {
  console.log(chunk.every((byte) => byte === 97)); // true
});
```

> The generation speed is about 6GB/s, and every byte is reset, so it is safe.

Create a 1MB size readable stream, every byte is between `97` (`01100001`) and `122` (`01111010`):

```js
const createZero = require("@stream-toolbox/zero");

const readable = createZero(1048576, [97, 122]);
readable.on("data", (chunk) => {
  console.log(chunk.every((byte) => byte >= 97 && byte <= 122)); // true
});
```

> The generation speed is about 100MB/s, and every byte is reset, so it is safe.

## API

```ts
createZero(total: number, fill?: number | [number, number]): Readable
```

---

> 🚰 创建一个会源源不断产生数据的[可读流](https://nodejs.org/api/stream.html#readable-streams)，有点类似于 [/dev/zero](https://en.wikipedia.org/wiki//dev/zero)，但多了一些额外的功能.

## 安装

```bash
npm i @stream-toolbox/zero
```

## 快速开始

创建一个 1GB 大小的可读流：

```js
const createZero = require("@stream-toolbox/zero");

const readable = createZero(1073741824); // 1073741824 bytes
let total = 0;
readable
  .on("data", (chunk) => {
    total += chunk.length;
  })
  .on("end", () => {
    console.log(total); // 1073741824
  });
```

> 生成速度大概在 12GB/s，数据由 [Buffer.allocUnsafe](https://nodejs.org/api/buffer.html#static-method-bufferallocunsafesize) 直出，注意 `Buffer.allocUnsafe` 产生的数据是未初始化的（未清零），这可能有一些[安全风险](https://nodejs.org/api/buffer.html#what-makes-bufferallocunsafe-and-bufferallocunsafeslow-unsafe)。

创建一个 1MB 大小的可读流，每一个字节都是 `97` (`01100001`)：

```js
const createZero = require("@stream-toolbox/zero");

const readable = createZero(1048576, 97);
readable.on("data", (chunk) => {
  console.log(chunk.every((byte) => byte === 97)); // true
});
```

> 生成速度大概在 6GB/s，每一个字节都被重置了，所以是安全的。

创建一个 1MB 大小的可读流，每一个字节都是 `97` (`01100001`) 到 `122` (`01111010`) 之间的数值：

```js
const createZero = require("@stream-toolbox/zero");

const readable = createZero(1048576, [97, 122]);
readable.on("data", (chunk) => {
  console.log(chunk.every((byte) => byte >= 97 && byte <= 122)); // true
});
```

> 生成速度大概在 100MB/s，每一个字节都被重置了，所以是安全的。

## API

```ts
createZero(total: number, fill?: number | [number, number]): Readable
```