mirror of
				https://kkgithub.com/actions/setup-python.git
				synced 2025-11-04 12:44:05 +08:00 
			
		
		
		
	
		
			
	
	
		
			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));
							 | 
						||
| 
								 | 
							
								```
							 |