82 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			82 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # 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)); | ||
|  | ``` |