Does anyone who uses or contributes to javascript + protobuf have any idea 
regarding my previous question?

Thanks :)

On Friday, 7 May 2021 at 19:59:10 UTC+1 Ben B wrote:

> Dear Protobuf team,
>
> I was looking to serialize Float32's or Int16 (or other arbitrary data 
> type) so I've decided to use the bytes type. Unfortunately, In Javascript, 
> I've had to convert this data into UInt8 to serialize it. This wasn't too 
> ergonomic because it involves using DataViews, because UInt8 is required to 
> `setBytes` and Int8Array(floatArray) will cast the numbers individually. In 
> the end, that's not a problem though.
>
> However, deserializing this data back out results in incorrect values:
> const { BytesMessage } = require('./protobuf/BytesMessage_pb');
>
> const message = new BytesMessage();
> const int16Array = new Int16Array([0, 1000, 2000]);
> const dataView = new DataView(int16Array.buffer);
> const uint8 = new Uint8Array(dataView.buffer);
> message.setSomeBytes(uint8);
> const bytes = message.serializeBinary(); // <--- This seems to negatively 
> affect the output
>
> const uint8before = message.getSomeBytes() as Uint8Array;
> const int16Before = new Int16Array(new 
> DataView(uint8before.buffer).buffer);
>
> const deserializedMessage = BytesMessage.deserializeBinary(bytes);
> const uint8after = deserializedMessage.getSomeBytes() as Uint8Array;
> const int16After = new Int16Array(new DataView(uint8after.buffer).buffer);
> console.log({ uint8before, uint8after });
> console.log({ int16Before, int16After });
>
> The output showing the inconsistency between *int16Before* and 
> *int16After*:
> {
>   uint8before: Uint8Array(6) [ 0, 0, 232, 3, 208, 7 ],
>   uint8after: Uint8Array(6) [ 0, 0, 232, 3, 208, 7 ]
> }
> {
>   int16Before: Int16Array(3) [ 0, 1000, 2000 ],
>   int16After: Int16Array(4) [ 1546, 0, 1000, 2000 ] <-- Notice this one is 
> different to the original.
> }
>
> I am not sure why this is the case. As you can see, the exact same code is 
> run, the difference between *before* and *after is whether is call 
> serializeBinary*. I have created a minimum example here in this repo: 
> https://github.com/ben-xD/google-protobuf-js-issue-1
>
> Please let me know what you think, is it my programming mistake or is it a 
> bug?
>
> Thanks!
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/protobuf/d09cc722-bd49-4ab2-a25b-e271d7f41ff4n%40googlegroups.com.

Reply via email to