| # BSER Binary Serialization | |
| BSER is a binary serialization scheme that can be used as an alternative to JSON. | |
| BSER uses a framed encoding that makes it simpler to use to stream a sequence of | |
| encoded values. | |
| It is intended to be used for local-IPC only and strings are represented as binary | |
| with no specific encoding; this matches the convention employed by most operating | |
| system filename storage. | |
| For more details about the serialization scheme see | |
| [Watchman's docs](https://facebook.github.io/watchman/docs/bser.html). | |
| ## API | |
| ```js | |
| var bser = require('bser'); | |
| ``` | |
| ### bser.loadFromBuffer | |
| The is the synchronous decoder; given an input string or buffer, | |
| decodes a single value and returns it. Throws an error if the | |
| input is invalid. | |
| ```js | |
| var obj = bser.loadFromBuffer(buf); | |
| ``` | |
| ### bser.dumpToBuffer | |
| Synchronously encodes a value as BSER. | |
| ```js | |
| var encoded = bser.dumpToBuffer(['hello']); | |
| console.log(bser.loadFromBuffer(encoded)); // ['hello'] | |
| ``` | |
| ### BunserBuf | |
| The asynchronous decoder API is implemented in the BunserBuf object. | |
| You may incrementally append data to this object and it will emit the | |
| decoded values via its `value` event. | |
| ```js | |
| var bunser = new bser.BunserBuf(); | |
| bunser.on('value', function(obj) { | |
| console.log(obj); | |
| }); | |
| ``` | |
| Then in your socket `data` event: | |
| ```js | |
| bunser.append(buf); | |
| ``` | |
| ## Example | |
| Read BSER from socket: | |
| ```js | |
| var bunser = new bser.BunserBuf(); | |
| bunser.on('value', function(obj) { | |
| console.log('data from socket', obj); | |
| }); | |
| var socket = net.connect('/socket'); | |
| socket.on('data', function(buf) { | |
| bunser.append(buf); | |
| }); | |
| ``` | |
| Write BSER to socket: | |
| ```js | |
| socket.write(bser.dumpToBuffer(obj)); | |
| ``` | |