package com.google.flatbuffers; import java.nio.ByteBuffer; import java.nio.ByteOrder; public class ByteBufferReadWriteBuf implements ReadWriteBuf { private final ByteBuffer buffer; public ByteBufferReadWriteBuf(ByteBuffer bb) { this.buffer = bb; this.buffer.order(ByteOrder.LITTLE_ENDIAN); } @Override public void clear() { buffer.clear(); } @Override public boolean getBoolean(int index) { return get(index) != 0; } @Override public byte get(int index) { return buffer.get(index); } @Override public short getShort(int index) { return buffer.getShort(index); } @Override public int getInt(int index) { return buffer.getInt(index); } @Override public long getLong(int index) { return buffer.getLong(index); } @Override public float getFloat(int index) { return buffer.getFloat(index); } @Override public double getDouble(int index) { return buffer.getDouble(index); } @Override public String getString(int start, int size) { return Utf8Safe.decodeUtf8Buffer(buffer, start, size); } @Override public byte[] data() { return buffer.array(); } @Override public void putBoolean(boolean value) { buffer.put(value ? (byte)1 : (byte)0); } @Override public void put(byte[] value, int start, int length) { buffer.put(value, start, length); } @Override public void put(byte value) { buffer.put(value); } @Override public void putShort(short value) { buffer.putShort(value); } @Override public void putInt(int value) { buffer.putInt(value); } @Override public void putLong(long value) { buffer.putLong(value); } @Override public void putFloat(float value) { buffer.putFloat(value); } @Override public void putDouble(double value) { buffer.putDouble(value); } @Override public void setBoolean(int index, boolean value) { set(index, value ? (byte)1 : (byte)0); } @Override public void set(int index, byte value) { requestCapacity(index + 1); buffer.put(index, value); } @Override public void set(int index, byte[] value, int start, int length) { requestCapacity(index + (length - start)); int curPos = buffer.position(); buffer.position(index); buffer.put(value, start, length); buffer.position(curPos); } @Override public void setShort(int index, short value) { requestCapacity(index + 2); buffer.putShort(index, value); } @Override public void setInt(int index, int value) { requestCapacity(index + 4); buffer.putInt(index, value); } @Override public void setLong(int index, long value) { requestCapacity(index + 8); buffer.putLong(index, value); } @Override public void setFloat(int index, float value) { requestCapacity(index + 4); buffer.putFloat(index, value); } @Override public void setDouble(int index, double value) { requestCapacity(index + 8); buffer.putDouble(index, value); } @Override public int writePosition() { return buffer.position(); } @Override public int limit() { return buffer.limit(); } @Override public boolean requestCapacity(int capacity) { return capacity <= buffer.limit(); } }