{"id":31939642,"url":"https://github.com/alibaba/dimbin","last_synced_at":"2025-10-14T08:44:31.149Z","repository":{"id":57154462,"uuid":"191930660","full_name":"alibaba/dimbin","owner":"alibaba","description":"High-performance serialization for multi-dimension arrays 海量数据高性能序列化方案","archived":false,"fork":false,"pushed_at":"2023-12-15T09:04:18.000Z","size":1418,"stargazers_count":70,"open_issues_count":1,"forks_count":15,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-10-13T05:24:09.880Z","etag":null,"topics":["binary","csharp","data","serialization","typescript"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alibaba.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-06-14T11:18:33.000Z","updated_at":"2025-08-08T16:31:25.000Z","dependencies_parsed_at":"2024-06-20T21:59:37.267Z","dependency_job_id":"fdcbb5e8-1338-47bb-aa8a-1d552e07c6f3","html_url":"https://github.com/alibaba/dimbin","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/alibaba/dimbin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fdimbin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fdimbin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fdimbin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fdimbin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alibaba","download_url":"https://codeload.github.com/alibaba/dimbin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alibaba%2Fdimbin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279018302,"owners_count":26086345,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["binary","csharp","data","serialization","typescript"],"created_at":"2025-10-14T08:44:29.203Z","updated_at":"2025-10-14T08:44:31.141Z","avatar_url":"https://github.com/alibaba.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DIMBIN\n\n\u003e High-performance serialization for multi-dimension arrays\n\u003e\n\u003e 针对大量数据网络传输设计的序列化方案，用于储存多维数组\n\u003e\n\u003e 通过*直接内存操作*实现高于 JSON 多个数量级的性能和更小的传输体积\n\n[《序列化方案选型建议》](https://github.com/alibaba/DIMBIN/wiki/序列化方案选型对比)\n\n## Useage\n\n### C#\n\n[see ./csharp](./csharp/README.md)\n\n### javascript\n\n`npm install --save dimbin`\n\n```javascript\nimport DIMBIN from 'dimbin' // v3\n\n// import DIMBIN from 'dimbin/v2' // old version\n```\n\n```javascript\nconst data = [\n    [0, 1, 2, 3], // 普通数值数组 ✅\n    new Int16Array([1, 2, 3, 4]), // TypedArray ✅\n    [\n        // 更高维度数组 ✅\n        [0, 1, 2],\n        [0, 1, 2, 3, 4],\n    ],\n    DIMBIN.stringsSerialize(['a', 'bc', '😊']), // Array\u003cstring\u003e\n    DIMBIN.booleansSerialize([true, false, true, true]), // Array\u003cboolean\u003e\n]\n\n// 序列化为ArrayBuffer\nconst bin = DIMBIN.serialize(data)\n\n// 反序列化为 Array\u003cTypedArray\u003e\nconst dim = DIMBIN.parse(bin)\ndim[3] = DIMBIN.stringsParse(dim[3])\ndim[4] = DIMBIN.booleansParse(dim[4])\n\n/*\n[\n    Float32Array{0, 1, 2, 3},\n    Int16Array{1, 2, 3, 4},\n    [\n        Float32Array{0, 1, 2},\n        Float32Array{0, 1, 2, 3, 4},\n    ],\n    ['a', 'bc', '😊'],\n    [true, false, true, true]\n]\n*/\n```\n\n## 数据结构\n\nDIMBIN 为多维数组而设计, 因此传入的数据结构必须为多维数组, 数组维数没有上限, 每一维度数组的元素个数上线为 2^32 . 维度和数组元素个数受运行环境和设备限制.\n\n```javascript\n// 粒子 🌰\n\n// 正确的格式\nconst input = [\n    // Array\n    [1, 2, 3],\n    // TypedArray\n    new Float32Array(1000),\n    // higher dimensions\n    [\n        //\n        [4, 5, 6],\n        new Float64Array(2000),\n    ],\n]\n\nconst wrong1 = [\n    // 必须为多维数组\n    1,\n    2,\n    3,\n]\n\nconst wrong2 = [\n    // - 数组元素必须 *全部为数组* 或者 *全部为数值*\n    [1, 2, 3, [4], [5]],\n]\n\nconst wrong3 = [\n    // 非数值数据需要先转换为数值数据\n    ['123', 'hello'],\n]\n```\n\n数组的元素支持以下数据类型\n\n-   number: Int8, UInt8, Int16, UInt16, Int32, UInt32, Float32, Float64\n-   string\n-   boolean\n\n默认情况下, 所有的数据将使用 Float32 格式进行保存.\n如果需要指定数据格式, 请先转换成 TypedArray.\n如需要处理字符串和布尔值, 请使用对应的接口预先转换成 TypedArray.\n\n## API\n\n### C#\n\n[see ./csharp](./csharp/README.md)\n\n### javascript\n\n#### `serialize`\n\n序列化为二进制数据\n\n-   @param `{Array\u003cTypedArray|Array\u003cnumber|TypedArray|Array\u003e\u003e} data` 多维数组\n-   @param `{float} magicNumber` 用户控制的标识位\n-   @return `{ArrayBuffer}`\n\n#### `parse`\n\n反序列化回多维数组\n\n-   @param `{ArrayBuffer|Buffer|DataView} buffer` 序列化后的二进制数据\n-   @return `{Array\u003cTypedArray|Array\u003cTypedArray|Array\u003e\u003e}`\n\n#### `getMeta`\n\n读取二进制数据的元数据\n\n-   @param `{ArrayBuffer|Buffer|DataView} buffer` 序列化后的二进制数据\n-   @return `{Meta}`\n\n```typescript\ninterface Meta {\n    version: number\n    magic_num: number\n    seg_meta_bytes: number\n    seg_meta_start: number\n    len: number\n    big_endian: boolean\n}\n```\n\n#### `stringsSerialize`\n\n将 Array\u003cstring\u003e 序列化成 TypedArray\n\n-   @param `{string[]} strs` 元素为字符串的数组\n-   @return `{UInt8Array}` 序列化后的二进制数据\n\n#### `stringsParse`\n\n将 stringsSerialize 生成的二进制数据解析回 Array\u003cstring\u003e\n\n-   @param `{UInt8Array}` 序列化后的二进制数据\n-   @return `{string[]}` 元素为字符串的数组\n\n#### `booleansSerialize`\n\n将 Array\u003cboolean\u003e 序列化成 TypedArray\n\n-   @param `{boolean[]} strs` 元素为布尔值的数组\n-   @return `{UInt8Array}` 序列化后的二进制数据\n\n#### `booleansParse`\n\n将 booleansSerialize 生成的二进制数据解析回 Array\u003cboolean\u003e\n\n-   @param `{UInt8Array}` 序列化后的二进制数据\n-   @return `{boolean[]}` 元素为布尔值的数组\n\n## Performance\n\nJS 环境下：当使用**纯数值数据**时\n\n-   序列化性能为 JSON 的 **3-10 倍**\n-   反序列化性能为 JSON 的 **十万到百万 倍**\n-   体积比 JSON **减小 60%**\n\n在 JS 环境中, 性能高于 flatbuffers 30%~100%, 远高于 protocolbuffers.\n\n**详细 benchmark 以及与 JSON / ProtocolBuffers / FlatBuffer 的对比与选型建议 \u003e\u003e\u003e**\n\n[**序列化方案选型对比**](https://github.com/alibaba/DIMBIN/wiki/序列化方案选型对比)\n\n## Development\n\n`npm install`\n\n`npm start`\n\nopen `http://localhost:3112/html/api` in your browser.\n\n`npm test`\n\n`npm run dist`\n\n## Specifications\n\n`specifications/v3.md`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falibaba%2Fdimbin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falibaba%2Fdimbin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falibaba%2Fdimbin/lists"}