How to store a 2D array using flatbuffers?

172 views Asked by At

That's my schema and I'm using flatc/flatbuffers version 23.5.26

namespace FbSignal;

table BitArray {
  bits: [int32];
}


table Message {
  pulses: [BitArray];
}

table Signal {
  label: string;
  frequency_hz: int64;
  data: Message;
}

I imported the libraries generated by flatc and filled data field in the in Signal table with random values. I read in the documentation that buffers are built back to front so i filled it backwards. After this, I exported the binary file.

from FbSignal import BitArray, Message, Signal
import flatbuffers as fb
import numpy as np

# (4 x 16) array with random numbers
dummy_array = np.random.randint(0,100,(4,16))

builder = fb.Builder()

pulses_list = []
for i in reversed(range(4)):
    BitArray.StartBitsVector(builder=builder,numElems=16)
    for j in reversed(range(16)):
        builder.PrependInt32(dummy_array[i][j])
    pulses_list.append(builder.EndVector())


Message.StartPulsesVector(builder,numElems=4)
for pulse in reversed(pulses_list):
    builder.PrependUOffsetTRelative(pulse)
data = builder.EndVector()

label = builder.CreateString('Dummy')

Signal.Start(builder=builder)
Signal.AddLabel(builder=builder,label=label)
Signal.AddFrequencyHz(builder=builder,frequencyHz=1000)
Signal.AddData(builder=builder,data=data)

signal = Signal.End(builder=builder)
builder.Finish(signal)
buf = builder.Output()


with open('dummy_signal.dat', 'wb') as bf:
    bf.write(buf)

But when I try to read it back:

buf = open('dummy_signal.dat', 'rb').read()
buf = bytearray(buf)
signal = Signal.Signal.GetRootAs(buf,0)
first_pulse = signal.Data().Pulses(1).BitsAsNumpy()

I get this error:

TypeError: bad number -12209 for type uint32

How to solve this error?

0

There are 0 answers