Работа с вложенными объектами в FlatBuffers - PullRequest
0 голосов
/ 27 апреля 2020

Предположим, у нас есть следующий объект:

table Tree {
  objects : [ubyte];
  nodes:[Tree];
}

Как вы можете видеть, каждый Tree может иметь набор objects и набор nodes с типом Tree. Я хочу сохранить объект QuadTree. в то время как я хочу сохранить их, мы сталкиваемся с ошибкой

Uncaught Error: FlatBuffers: object serialization must not be nested.

, существует ли какой-либо метод или обходной путь для решения этой проблемы? Это моя функция, чтобы сохранить дерево

 function () {
        var tNodes = [];
        if(this.nodes.length){
            this.nodes.forEach(node => {
                var data= node.save();
                // console.log(treeOffset);
                tNodes.push(data[0]);
            });
        }
        var builder = new flatbuffers.Builder(0)

              //Generate array of objects
            const objectsArray = new Uint8Array(100000);
            const view = new DataView(objectsArray.buffer);
            const encoder = new TextEncoder();
            let offset = 0;


            for (let index = 0; index < this.objects.length; index++) {
                view.setUint16(offset, index, true)
                offset += 2
                const str = this.objects[index];
                const stringArray = encoder.encode(str);
                view.setUint32(offset, stringArray.length, true);
                offset += 4
                objectsArray.set(stringArray, offset)
                offset += stringArray.length;
            }

           var  objectsOffset = GeoIPFS.Tree.createObjectsVector(builder, objectsArray.slice(0, offset));
            var Tree = GeoIPFS.Tree;
            Tree.startTree(builder);
            Tree.addObjects(builder, objectsOffset);

            tNodes.forEach(n=>{
                Tree.createNodesVector(builder,n);
            })

            var treeOffset = Tree.endTree(builder);
            builder.finish(treeOffset);
            return [builder.asUint8Array(),treeOffset]

    }

...