Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jsantell/buffer-queue
fast buffer storage
https://github.com/jsantell/buffer-queue
Last synced: 3 months ago
JSON representation
fast buffer storage
- Host: GitHub
- URL: https://github.com/jsantell/buffer-queue
- Owner: jsantell
- License: mit
- Created: 2015-03-12T21:13:28.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2015-03-13T00:29:33.000Z (almost 10 years ago)
- Last Synced: 2024-11-01T00:51:28.464Z (3 months ago)
- Language: JavaScript
- Size: 105 KB
- Stars: 8
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# buffer-queue
[![Build Status](http://img.shields.io/travis/jsantell/buffer-queue.svg?style=flat-square)](https://travis-ci.org/jsantell/buffer-queue)
[![Build Status](http://img.shields.io/npm/v/buffer-queue.svg?style=flat-square)](https://www.npmjs.org/package/buffer-queue)A fast buffer store, for queueing up buffer chunks to later drain as a full buffer for streams. Faster than `Buffer.concat` on every chunk.
## Install
```
npm install buffer-queue
```## Usage
Example of a transform stream that only writes downstream 1MB at a time, storing
up buffers in the buffer store.```javascript
var Transform = require("stream").Transform;
var util = require("util");
var Store = require("buffer-queue");/**
* Transform stream that limits writes to 1MB at a time
*/
function ThrottleStream (limit) {
this.limit = limit || 1024 * 1024;
this.store = new Store();
Transform.call(this);
}
util.inherits(ThrottleStream, Transform);ThrottleStream.prototype._transform = function (chunk, enc, callback) {
this.store.push(chunk);
var data;// While we have more in our store than the limit, then push
// out a chunk
while (this.store.length() > this.limit && data = this.store.shift(this.limit)) {
this.push(data);
}
callback();
};ThrottleStream.prototype._flush = function (callback) {
var data;
while (data = this.store.shift(this.limit)) {
this.push(data);
}
callback();
};
```## API
### `BufferStore()`
Constructor for a buffer store.
#### `store.push(buffer)`
Pushes a buffer to the store.
#### `store.shift(n)`
Returns the first `n` bytes of the entire buffer store and removes from the store.
#### `store.empty()`
Empties the entire internal buffer store.
#### `store.length()`
Returns the length of the internal buffer store in bytes.
#### `store.drain()`
Empties and returns the internal buffer store. Use `store.empty()` if you are not interested in the return value.
## Testing
```
npm test
```## License
MIT License, Copyright (c) 2015 Jordan Santell