Tiny and fast async generator to read streams line by line
Node 10+ is required. This package provides very simple but feature-reach functionality to consume readable streams or files line by line. It's also quite fast (up to 30% faster than readline
) and has no dependencies.
Features:
- reading of files (by name)
- reading of readable streams
- generator mode via
readlines
- readable stream mode via
LineStream
- customizable separator (default is
\n
) - raw bytes mode if
encoding
option isnull
- configurable lookahead buffer size
Documentation
Have a look at the index.js
, it's really tiny. Or check the usage example below.
Usage examples:
const readlines LineStream = ; // As a generatorfor await const line of console; // As a readable streamconst reader = filename chunkSize: 256*1024 encoding: null;for { console;} // Custom separatorconst PassThrough = ;const datasource = ;datasource;datasource;datasource; const reader = filename sep: '42' ;for { console;}
Tests
npm run test
Benchmark
Trivial wc -l
impl using this package exposes the performance better than the standard readline
module.
npm run bench </path/to/huge/file> # Node 11+ is required # File size ~2.8 GB > Benchmark: lines counter > 5974719 lines found> Done in 5.757290349 sec > Benchmark: lines counter > 5974719 lines found> Done in 4.707053160 sec > Benchmark: lines counter > 5974719 lines found> Done in 3.937784544 sec > Benchmark: lines counter > 5974719 lines found> Done in 4.984460949 sec > Benchmark: lines counter > 5974719 lines found> Done in 4.354594750 sec