GithubHelp home page GithubHelp logo

Comments (7)

ochrons avatar ochrons commented on August 22, 2024

True, the pickling phase assumes little-endian ByteBuffers. Since new allocations can happen anywhere in the encoding, the provider must make sure the byte buffers are in correct order. This is a requirement for the provider (although it's not mentioned anywhere in the docs, so need to amend those).

Is there some specific reason why you'd want to provide big-endian BBs to BooPickle?

from boopickle.

slandelle avatar slandelle commented on August 22, 2024

I reuse ByteBuffers and have different code paths (w/ or w/o compression) and have to sometimes write outside BooPickle (eg compressed frame length).

With the current behavior, the most sane way is to use LE everywhere, which might be a good thing for performance, but can still be error prone as it's not the default. I sure can live with it.

Still, I don't really get why BooPickle has to assume LE. Could you please explain.

from boopickle.

ochrons avatar ochrons commented on August 22, 2024

In the browser typed arrays always use native endianess (which in practice means little-endian), so it's much easier/faster to work with. Although current Scala.js implementation goes through a Dataview which handles the endianess in both cases.

from boopickle.

slandelle avatar slandelle commented on August 22, 2024

I got that :)

the provider must make sure the byte buffers are in correct order

Sure, but why not memorize the original byte order, and restore it when pickling is done? And same thing when unpickling.

For example, if you try to send a Boopickle payload over HTTP with Netty, it will complain that byte orders are inconsistent: payload will use l-e while headers will use b-e. The workaround is to change the byte order before feeding Netty.

from boopickle.

ochrons avatar ochrons commented on August 22, 2024

Sure, but why not memorize the original byte order, and restore it when pickling is done? And same thing when unpickling.

This is under the ByteBufferProvider's responsibility so if you make a custom one, you can put the logic there. Likewise after the pickling is completed, you can flip the byte order to BE if needed.

On the unpickling side things are simpler as there is only one BB to work with and BooPickle already manages the byte order correctly.

from boopickle.

ochrons avatar ochrons commented on August 22, 2024

Documentation updated to emphasize the importance of correct ordering.

from boopickle.

slandelle avatar slandelle commented on August 22, 2024

Thanks. I'll ping if I come up with some elegant solution for my use case.

from boopickle.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.