1 package com.google.flatbuffers; 2 3 import java.nio.ByteBuffer; 4 import java.nio.ByteOrder; 5 6 public class ByteBufferReadWriteBuf implements ReadWriteBuf { 7 8 private final ByteBuffer buffer; 9 ByteBufferReadWriteBuf(ByteBuffer bb)10 public ByteBufferReadWriteBuf(ByteBuffer bb) { 11 this.buffer = bb; 12 this.buffer.order(ByteOrder.LITTLE_ENDIAN); 13 } 14 15 @Override clear()16 public void clear() { 17 buffer.clear(); 18 } 19 20 @Override getBoolean(int index)21 public boolean getBoolean(int index) { 22 return get(index) != 0; 23 } 24 25 @Override get(int index)26 public byte get(int index) { 27 return buffer.get(index); 28 } 29 30 @Override getShort(int index)31 public short getShort(int index) { 32 return buffer.getShort(index); 33 } 34 35 @Override getInt(int index)36 public int getInt(int index) { 37 return buffer.getInt(index); 38 } 39 40 @Override getLong(int index)41 public long getLong(int index) { 42 return buffer.getLong(index); 43 } 44 45 @Override getFloat(int index)46 public float getFloat(int index) { 47 return buffer.getFloat(index); 48 } 49 50 @Override getDouble(int index)51 public double getDouble(int index) { 52 return buffer.getDouble(index); 53 } 54 55 @Override getString(int start, int size)56 public String getString(int start, int size) { 57 return Utf8Safe.decodeUtf8Buffer(buffer, start, size); 58 } 59 60 @Override data()61 public byte[] data() { 62 return buffer.array(); 63 } 64 65 @Override putBoolean(boolean value)66 public void putBoolean(boolean value) { 67 buffer.put(value ? (byte)1 : (byte)0); 68 } 69 70 @Override put(byte[] value, int start, int length)71 public void put(byte[] value, int start, int length) { 72 buffer.put(value, start, length); 73 } 74 75 @Override put(byte value)76 public void put(byte value) { 77 buffer.put(value); 78 } 79 80 @Override putShort(short value)81 public void putShort(short value) { 82 buffer.putShort(value); 83 } 84 85 @Override putInt(int value)86 public void putInt(int value) { 87 buffer.putInt(value); 88 } 89 90 @Override putLong(long value)91 public void putLong(long value) { 92 buffer.putLong(value); 93 } 94 95 @Override putFloat(float value)96 public void putFloat(float value) { 97 buffer.putFloat(value); 98 } 99 100 @Override putDouble(double value)101 public void putDouble(double value) { 102 buffer.putDouble(value); 103 } 104 105 @Override setBoolean(int index, boolean value)106 public void setBoolean(int index, boolean value) { 107 set(index, value ? (byte)1 : (byte)0); 108 } 109 110 @Override set(int index, byte value)111 public void set(int index, byte value) { 112 requestCapacity(index + 1); 113 buffer.put(index, value); 114 } 115 116 @Override set(int index, byte[] value, int start, int length)117 public void set(int index, byte[] value, int start, int length) { 118 requestCapacity(index + (length - start)); 119 int curPos = buffer.position(); 120 buffer.position(index); 121 buffer.put(value, start, length); 122 buffer.position(curPos); 123 } 124 125 @Override setShort(int index, short value)126 public void setShort(int index, short value) { 127 requestCapacity(index + 2); 128 buffer.putShort(index, value); 129 } 130 131 @Override setInt(int index, int value)132 public void setInt(int index, int value) { 133 requestCapacity(index + 4); 134 buffer.putInt(index, value); 135 } 136 137 @Override setLong(int index, long value)138 public void setLong(int index, long value) { 139 requestCapacity(index + 8); 140 buffer.putLong(index, value); 141 } 142 143 @Override setFloat(int index, float value)144 public void setFloat(int index, float value) { 145 requestCapacity(index + 4); 146 buffer.putFloat(index, value); 147 } 148 149 @Override setDouble(int index, double value)150 public void setDouble(int index, double value) { 151 requestCapacity(index + 8); 152 buffer.putDouble(index, value); 153 } 154 155 @Override writePosition()156 public int writePosition() { 157 return buffer.position(); 158 } 159 160 @Override limit()161 public int limit() { 162 return buffer.limit(); 163 } 164 165 @Override requestCapacity(int capacity)166 public boolean requestCapacity(int capacity) { 167 return capacity <= buffer.limit(); 168 } 169 170 } 171