public double readDouble() {
   ensureCanGrow(8);
   double value = Unsafe.INSTANCE.getDouble(address + position);
   position += 8;
   return BigEndian.ioDouble(value);
 }
 public float readFloat() {
   ensureCanGrow(4);
   float value = Unsafe.INSTANCE.getFloat(address + position);
   position += 4;
   return BigEndian.ioFloat(value);
 }
 public long readLong() {
   ensureCanGrow(8);
   long value = Unsafe.INSTANCE.getLong(address + position);
   position += 8;
   return BigEndian.ioLong(value);
 }
 public int readInt() {
   ensureCanGrow(4);
   int value = Unsafe.INSTANCE.getInt(address + position);
   position += 4;
   return BigEndian.ioInt(value);
 }
 public short readShort() {
   ensureCanGrow(2);
   short value = Unsafe.INSTANCE.getShort(address + position);
   position += 2;
   return BigEndian.ioShort(value);
 }
 public char readChar() {
   ensureCanGrow(2);
   char value = Unsafe.INSTANCE.getChar(address + position);
   position += 2;
   return BigEndian.ioChar(value);
 }