Data serialize/deserialize utility for JS/JSX/AMD/CommonJS
This is a part of Oktavia. This code is created for serialize/desrialize search engine dictionary. Oktavia is a client side search engine. To realize that, this module packs data into string and compress a little.
From 0.2, it became compatible with oktavia.py's binaryio.py
.
import "binary-io.jsx";
import "js/nodejs.jsx";
class _Main {
static function main(argv : string[]) : void
{
// reading
var data = node.fs.readFileSync("searchdata.bin", "utf16le");
var input = new BinaryInput(data);
var dataSize = input.load32bitNumber();
var keywords = input.loadStringList();
// writing
var output = new BinaryOutput();
output.dump32bitNumber(dataSize);
output.dumpStringList(names);
node.fs.writeFileSync("outputdata.bin", output.result(), 'utf16le');
}
}
var BinaryInput = require('binary-io.common.js').BinaryInput;
var BinaryOutput = require('binary-io.common.js').BinaryOutput;
var input = new BinaryInput(fs.readFileSync(process.argv[2], 'utf16le'));
var scores = input.load32bitNumberList();
// use binary-io.amd.js
define(['binary-io.amd'], function (binary-io.jsx) {
$.get('http://example.com/database', function (data) {
var input = new BinaryInput(window.atob(data));
$('#name').text(input.loadString());
});
});
<script src="binary-io.js}}" type="text/javascript"></script>
<script type="text/javascript">
window.onload = function () {
var BinaryOutput = JSX.require("src/binary-io.js").BinaryOutput;
var output = new BinaryOutput();
output.dump16bitNumber($('#selectedNumber').value());
output.dumpStringList($('#nameListTextArea').value().split('\n'));
$.post('http://example.com/postData/', output.result());
});
</script>
<script src="binary-io.global.js}}" type="text/javascript"></script>
<script type="text/javascript">
window.onload = function () {
var obj = new BinaryOutput();
...
});
</script>
$ npm install binary-io.jsx
If you want to use this library from other JSX project, install like the following:
$ npm install binary-io.jsx --save-dev
or add like these lines to your parent project's package.json
:
devDependencies: {
"binary-io.jsx": "~0.3.0"
},
peerDepenencies: {
"binary-io.jsx": "~0.3.0"
}
And add node_modules/binary-io.jsx/src
as a search path.
It provides the following methods. This module doesn't store type information. You should call BinaryInput's method in same order of BinaryOutput to keep data.
Constructor. `data` should be a serialized data by `BinaryOutput`.
Read 4 bytes and return value as number.
Read 2 bytes and return value as int.
Read data return value as string.
Read data return value as list of string.
Read data return value as map of list of string.
Read data and return as list of number.
Constructor. No option accept.
Append 4 bytes data to result string.
Append 2 bytes data to result string.
Append string to result string. If all characters uses only latin-1 characters,
It packs 2 characters into 1 character.
Append string list to result string. It uses a same data compression as `dumpString`.
Append map of string list to result string. It uses a same data compression as `dumpString`.
Append list of numbers to result string. It uses simple RLE like data compression.
Return resulting string.
Don't afraid JSX! If you have an experience of JavaScript, you can learn JSX quickly.
- Static type system and unified class syntax.
- All variables and methods belong to class.
- JSX includes optimizer. You don't have to write tricky unreadalbe code for speed.
- You can use almost all JavaScript API as you know. Some functions become static class functions. See reference.
To create development environment, call following command:
$ npm install
- Repository: git@github.com:shibukawa/binary-io.jsx.git
- Issues: https://github.com/shibukawa/binary-io.jsx/issues
$ grunt test
$ grunt build
$ grunt doc
- shibukawa / yoshiki@shibu.jp
MIT
Complete license is written in LICENSE.md
.