这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions libraries-data-io-2/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-modules</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>

<artifactId>libraries-data-io-2</artifactId>
<name>libraries-data-io-3</name>

<properties>
<maven.compiler.source>19</maven.compiler.source>
<maven.compiler.target>19</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<google-flatbuffers.version>23.5.26</google-flatbuffers.version>
</properties>
<dependencies>
<dependency>
<groupId>com.google.flatbuffers</groupId>
<artifactId>flatbuffers-java</artifactId>
<version>${google-flatbuffers.version}</version>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// automatically generated by the FlatBuffers compiler, do not modify

package MyGame.terrains;

@SuppressWarnings("unused")
public final class Color {
private Color() { }
public static final byte Brown = 0;
public static final byte Red = 1;
public static final byte Green = 2;
public static final byte Blue = 3;
public static final byte White = 4;

public static final String[] names = { "Brown", "Red", "Green", "Blue", "White", };

public static String name(int e) { return names[e]; }
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// automatically generated by the FlatBuffers compiler, do not modify

package MyGame.terrains;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

import com.google.flatbuffers.BaseVector;
import com.google.flatbuffers.Constants;
import com.google.flatbuffers.FlatBufferBuilder;
import com.google.flatbuffers.Table;

@SuppressWarnings("unused")
public final class Effect extends Table {
public static void ValidateVersion() { Constants.FLATBUFFERS_23_5_26(); }
public static Effect getRootAsEffect(ByteBuffer _bb) { return getRootAsEffect(_bb, new Effect()); }
public static Effect getRootAsEffect(ByteBuffer _bb, Effect obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
public Effect __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }

public String name() { int o = __offset(4); return o != 0 ? __string(o + bb_pos) : null; }
public ByteBuffer nameAsByteBuffer() { return __vector_as_bytebuffer(4, 1); }
public ByteBuffer nameInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 4, 1); }
public short damage() { int o = __offset(6); return o != 0 ? bb.getShort(o + bb_pos) : 0; }
public boolean mutateDamage(short damage) { int o = __offset(6); if (o != 0) { bb.putShort(o + bb_pos, damage); return true; } else { return false; } }

public static int createEffect(FlatBufferBuilder builder,
int nameOffset,
short damage) {
builder.startTable(2);
Effect.addName(builder, nameOffset);
Effect.addDamage(builder, damage);
return Effect.endEffect(builder);
}

public static void startEffect(FlatBufferBuilder builder) { builder.startTable(2); }
public static void addName(FlatBufferBuilder builder, int nameOffset) { builder.addOffset(0, nameOffset, 0); }
public static void addDamage(FlatBufferBuilder builder, short damage) { builder.addShort(1, damage, 0); }
public static int endEffect(FlatBufferBuilder builder) {
int o = builder.endTable();
return o;
}

public static final class Vector extends BaseVector {
public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }

public Effect get(int j) { return get(new Effect(), j); }
public Effect get(Effect obj, int j) { return obj.__assign(__indirect(__element(j), bb), bb); }
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// automatically generated by the FlatBuffers compiler, do not modify

package MyGame.terrains;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

import com.google.flatbuffers.BaseVector;
import com.google.flatbuffers.Constants;
import com.google.flatbuffers.FlatBufferBuilder;
import com.google.flatbuffers.Table;

@SuppressWarnings("unused")
public final class Terrain extends Table {
public static void ValidateVersion() { Constants.FLATBUFFERS_23_5_26(); }
public static Terrain getRootAsTerrain(ByteBuffer _bb) { return getRootAsTerrain(_bb, new Terrain()); }
public static Terrain getRootAsTerrain(ByteBuffer _bb, Terrain obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
public Terrain __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }

public MyGame.terrains.Vec3 pos() { return pos(new MyGame.terrains.Vec3()); }
public MyGame.terrains.Vec3 pos(MyGame.terrains.Vec3 obj) { int o = __offset(4); return o != 0 ? obj.__assign(o + bb_pos, bb) : null; }
public String name() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
public ByteBuffer nameAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
public ByteBuffer nameInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
public byte color() { int o = __offset(8); return o != 0 ? bb.get(o + bb_pos) : 3; }
public boolean mutateColor(byte color) { int o = __offset(8); if (o != 0) { bb.put(o + bb_pos, color); return true; } else { return false; } }
public String navigation() { int o = __offset(10); return o != 0 ? __string(o + bb_pos) : null; }
public ByteBuffer navigationAsByteBuffer() { return __vector_as_bytebuffer(10, 1); }
public ByteBuffer navigationInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 10, 1); }
public MyGame.terrains.Effect effects(int j) { return effects(new MyGame.terrains.Effect(), j); }
public MyGame.terrains.Effect effects(MyGame.terrains.Effect obj, int j) { int o = __offset(12); return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; }
public int effectsLength() { int o = __offset(12); return o != 0 ? __vector_len(o) : 0; }
public MyGame.terrains.Effect.Vector effectsVector() { return effectsVector(new MyGame.terrains.Effect.Vector()); }
public MyGame.terrains.Effect.Vector effectsVector(MyGame.terrains.Effect.Vector obj) { int o = __offset(12); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }

public static void startTerrain(FlatBufferBuilder builder) { builder.startTable(5); }
public static void addPos(FlatBufferBuilder builder, int posOffset) { builder.addStruct(0, posOffset, 0); }
public static void addName(FlatBufferBuilder builder, int nameOffset) { builder.addOffset(1, nameOffset, 0); }
public static void addColor(FlatBufferBuilder builder, byte color) { builder.addByte(2, color, 3); }
public static void addNavigation(FlatBufferBuilder builder, int navigationOffset) { builder.addOffset(3, navigationOffset, 0); }
public static void addEffects(FlatBufferBuilder builder, int effectsOffset) { builder.addOffset(4, effectsOffset, 0); }
public static int createEffectsVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
public static void startEffectsVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
public static int endTerrain(FlatBufferBuilder builder) {
int o = builder.endTable();
return o;
}
public static void finishTerrainBuffer(FlatBufferBuilder builder, int offset) { builder.finish(offset); }
public static void finishSizePrefixedTerrainBuffer(FlatBufferBuilder builder, int offset) { builder.finishSizePrefixed(offset); }

public static final class Vector extends BaseVector {
public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }

public Terrain get(int j) { return get(new Terrain(), j); }
public Terrain get(Terrain obj, int j) { return obj.__assign(__indirect(__element(j), bb), bb); }
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// automatically generated by the FlatBuffers compiler, do not modify

package MyGame.terrains;

import java.nio.ByteBuffer;

import com.google.flatbuffers.BaseVector;
import com.google.flatbuffers.FlatBufferBuilder;
import com.google.flatbuffers.Struct;

@SuppressWarnings("unused")
public final class Vec3 extends Struct {
public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
public Vec3 __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }

public float x() { return bb.getFloat(bb_pos + 0); }
public void mutateX(float x) { bb.putFloat(bb_pos + 0, x); }
public float y() { return bb.getFloat(bb_pos + 4); }
public void mutateY(float y) { bb.putFloat(bb_pos + 4, y); }
public float z() { return bb.getFloat(bb_pos + 8); }
public void mutateZ(float z) { bb.putFloat(bb_pos + 8, z); }

public static int createVec3(FlatBufferBuilder builder, float x, float y, float z) {
builder.prep(4, 12);
builder.putFloat(z);
builder.putFloat(y);
builder.putFloat(x);
return builder.offset();
}

public static final class Vector extends BaseVector {
public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }

public Vec3 get(int j) { return get(new Vec3(), j); }
public Vec3 get(Vec3 obj, int j) { return obj.__assign(__element(j), bb); }
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.baeldung.flatbuffers;

import static MyGame.terrains.Terrain.addColor;
import static MyGame.terrains.Terrain.addEffects;
import static MyGame.terrains.Terrain.addNavigation;
import static MyGame.terrains.Terrain.endTerrain;
import static MyGame.terrains.Terrain.startTerrain;

import java.nio.ByteBuffer;

import com.google.flatbuffers.FlatBufferBuilder;

import MyGame.terrains.Effect;
import MyGame.terrains.Terrain;

public class MyGameMain {

public byte[] serialiseDesertTerrainData() {
int INITIAL_BUFFER = 1024;
FlatBufferBuilder builder = new FlatBufferBuilder(INITIAL_BUFFER);

int sandstormOffset = builder.createString("Sandstorm");
short damage = 3;
int sandStorm = MyGame.terrains.Effect.createEffect(builder, sandstormOffset, damage);

int droughtOffset = builder.createString("Drought");
short damageDrought = 1;
int drought = MyGame.terrains.Effect.createEffect(builder, droughtOffset, damageDrought);
int[] effects = new int[2];
effects[0] = sandStorm;
effects[1] = drought;

byte color = MyGame.terrains.Color.Brown;
int terrainName = builder.createString("Desert");
int navigationName = builder.createString("south");

int effectOffset = MyGame.terrains.Terrain.createEffectsVector(builder, effects);

startTerrain(builder);
MyGame.terrains.Terrain.addName(builder, terrainName);
addColor(builder, color);
addNavigation(builder, navigationName);
addEffects(builder, effectOffset);
int desert = endTerrain(builder);
builder.finish(desert);

return builder.sizedByteArray();
}

public MyGame.terrains.Terrain deserialiseDataToTerrain(byte[] buffer) {
ByteBuffer buf = ByteBuffer.wrap(buffer);
return Terrain.getRootAsTerrain(buf);
}

public Effect.Vector deserialiseDataToEffect(byte[] buffer) {
ByteBuffer buf = ByteBuffer.wrap(buffer);

return Terrain.getRootAsTerrain(buf)
.effectsVector();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

namespace MyGame.terrains;

enum Color:byte { Brown = 0, Red = 1, Green = 2, Blue = 3, White = 4 }

struct Vec3 {
x:float;
y:float;
z:float;
}

table Terrain {
pos:Vec3; // Struct.
name: string;
color:Color = Blue;
navigation: string;
effects: [Effect];
}

table Effect {
name: string;
damage: short;
}

root_type Terrain;
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package flatbuffers;

import org.junit.Assert;
import org.junit.Test;

import com.baeldung.flatbuffers.MyGameMain;

import MyGame.terrains.Effect;

public class FlatBufferGameUnitTest {

@Test
public void givenTerrainEffect_whenSerialisedWithValues_returnBytes() {
MyGameMain myGame = new MyGameMain();
byte[] bytes = myGame.serialiseDesertTerrainData();
Assert.assertNotNull(bytes);
}

@Test
public void givenSerialisedBytes_whenDeSerialised_returnsTerrain() {
MyGameMain myGame = new MyGameMain();
byte[] bytes = myGame.serialiseDesertTerrainData();

MyGame.terrains.Terrain terrain = myGame.deserialiseDataToTerrain(bytes);
Assert.assertNotNull(terrain);
Assert.assertEquals(terrain.name(), "Desert");
Assert.assertEquals(terrain.navigation(), "south");
Assert.assertEquals(MyGame.terrains.Color.name(terrain.color()), "Brown");
}

@Test
public void givenSerialisedBytes_whenDeSerialised_returnsTerrainEffect() {
MyGameMain myGame = new MyGameMain();
byte[] bytes = myGame.serialiseDesertTerrainData();

Effect.Vector effectsVector = myGame.deserialiseDataToEffect(bytes);
Assert.assertNotNull(effectsVector);
Assert.assertEquals(effectsVector.get(0).name(), "Sandstorm");
Assert.assertEquals(effectsVector.get(1).name(), "Drought");

Assert.assertEquals(effectsVector.get(1).damage(), 1);
}
}
3 changes: 3 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
<artifactId>parent-modules</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>parent-modules</name>
<modules>
<module>libraries-data-io-2</module>
</modules>

<packaging>pom</packaging>

Expand Down