Java 从flatbuffers到bytearray的序列化和反序列化

Java 从flatbuffers到bytearray的序列化和反序列化,java,serialization,flatbuffers,Java,Serialization,Flatbuffers,嗨,社区:) 我想用java创建一个flatbuffers对象,我可以将其序列化为字节数组, 然后在java对象中反序列化。我第一次用平板缓冲器工作 我不能初始化java对象。我一步一步走: 写一个计划 使用flatbuffers编译器将其编译为java类 从github导入flatbuffers类 尝试构建一个java对象 以下是我的第4步代码: FlatBufferBuilder fbb = new FlatBufferBuilder(1); int str = fbb.createStri

嗨,社区:)

我想用java创建一个flatbuffers对象,我可以将其序列化为字节数组, 然后在java对象中反序列化。我第一次用平板缓冲器工作 我不能初始化java对象。我一步一步走:

  • 写一个计划
  • 使用flatbuffers编译器将其编译为java类
  • 从github导入flatbuffers类
  • 尝试构建一个java对象
  • 以下是我的第4步代码:

    FlatBufferBuilder fbb = new FlatBufferBuilder(1);
    int str = fbb.createString("Dummy");
    Monster.startPerson(fbb);
    Monster.addName(fbb, str);
    int p = Person.endPerson(fbb);
    
    也许有人可以发布一个简单的示例来创建flatbuffers对象,以及如何在bytearray之间序列化和反序列化

    希望得到答复和最好的问候

    保罗


    谷歌集团页面上的答案:
    谷歌集团页面上的答案: 序列化

    FlatBufferBuilder fbb = new FlatBufferBuilder();
    int str = fbb.createString("MyMonster");
    Monster.startMonster(fbb);
    Monster.addName(fbb, str);
    int mon = Monster.endMonster(fbb); 
    fbb.finish(mon);   
    byte[] data = fbb.sizedByteArray();
    
    应得的

    ByteBuffer buff = ByteBuffer.wrap(data);
    Monstermonster monster = Monster.getRootAsMonster(buff);
    System.out.println(monster.name());
    
    希望对您有所帮助。

    FlatBufferBuilder fbb = new FlatBufferBuilder();
    int str = fbb.createString("MyMonster");
    Monster.startMonster(fbb);
    Monster.addName(fbb, str);
    int mon = Monster.endMonster(fbb); 
    fbb.finish(mon);   
    byte[] data = fbb.sizedByteArray();
    
    应得的

    ByteBuffer buff = ByteBuffer.wrap(data);
    Monstermonster monster = Monster.getRootAsMonster(buff);
    System.out.println(monster.name());
    

    希望有此帮助。

    认为您有以下FlatBuffers架构:

    table ServiceException {
        message:string;
    }
    
    使用
    flatc
    编译此模式以生成Java类后,您可以创建
    ServiceException
    实例并将其转换为
    字节[]
    ,如下所示:

    FlatBufferBuilder fbb = new FlatBufferBuilder();
    int messagePosition = fbb.createString("something bad happened");
    int serviceExceptionPosition = ServiceException.createServiceException(fbb, messagePosition);
    fbb.finish(serviceExceptionPosition);
    byte[] outputBytes = fbb.sizedByteArray();
    
    接下来,将生成的
    outputBytes
    转换回
    ServiceException
    实例:

    ByteBuffer inputByteBuffer = ByteBuffer.wrap(outputBytes);
    ServiceException serviceException = ServiceException.getRootAsServiceException(inputByteBuffer);
    

    假设您具有以下FlatBuffers架构:

    table ServiceException {
        message:string;
    }
    
    使用
    flatc
    编译此模式以生成Java类后,您可以创建
    ServiceException
    实例并将其转换为
    字节[]
    ,如下所示:

    FlatBufferBuilder fbb = new FlatBufferBuilder();
    int messagePosition = fbb.createString("something bad happened");
    int serviceExceptionPosition = ServiceException.createServiceException(fbb, messagePosition);
    fbb.finish(serviceExceptionPosition);
    byte[] outputBytes = fbb.sizedByteArray();
    
    接下来,将生成的
    outputBytes
    转换回
    ServiceException
    实例:

    ByteBuffer inputByteBuffer = ByteBuffer.wrap(outputBytes);
    ServiceException serviceException = ServiceException.getRootAsServiceException(inputByteBuffer);
    

    如何将其从字节数组反序列化到FlatBuffer。本页的答案不包括反序列化情况。如何将其从字节数组反序列化到FlatBuffer。此页上的答案不包括反序列化情况。
    fbb.sizedByteArray()
    由于缺少
    fbb.finish()
    调用而无法工作。看看我的答案。啊!我忘了。谢谢。
    fbb.sizedByteArray()
    由于缺少
    fbb.finish()
    调用而无法工作。看看我的答案。啊!我忘了。谢谢你..sizedByteArray()而不是.byteBuffer()救了我一天:)谢谢!。sizedByteArray()而不是.byteBuffer()救了我一天:)谢谢!