UUIDBinaryCodec class

Пакет: com.hypixel.hytale.codec.codecs

Файл: com/hypixel/hytale/codec/codecs/UUIDBinaryCodec.java

implements: Codec<UUID>

Поля (11)

МодификаторыТипИмя
break
break
long var2
StringSchema var2
BsonBinary var3
byte[] var3
UUID var3
var3
byte var4
String var4
byte[] var5

Методы (11)

МодификаторыВозвратСигнатура
abstract return new BsonBinaryreturn new BsonBinary(BsonBinarySubType.UUID_STANDARD, var3)
abstract throw new CodecExceptionthrow new CodecException("Unexpected BsonBinarySubType")
abstract throw new IOExceptionthrow new IOException("Unknown field '" + var4 + "' when decoding UUID!")
abstract throw new IOExceptionthrow new IOException("Expected to find '$binary' field when decoding UUID!")
if if(var3 == null)
if if(var0.length != 16)
static long readLongFromArrayBigEndianlong readLongFromArrayBigEndian(@Nonnull byte[] var0, int var1)
switch switch(var4)
abstract return uuidFromBytesreturn uuidFromBytes(var5)
while while(true)
static void writeLongToArrayBigEndianvoid writeLongToArrayBigEndian(@Nonnull byte[] var0, int var1, long var2)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.codec.codecs;

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.exception.CodecException;
class="kw">import com.hypixel.hytale.codec.schema.SchemaContext;
class="kw">import com.hypixel.hytale.codec.schema.config.Schema;
class="kw">import com.hypixel.hytale.codec.schema.config.StringSchema;
class="kw">import com.hypixel.hytale.codec.util.RawJsonReader;
class="kw">import java.io.IOException;
class="kw">import java.util.Base64;
class="kw">import java.util.UUID;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.bson.BsonBinary;
class="kw">import org.bson.BsonBinarySubType;
class="kw">import org.bson.BsonValue;

class="kw">public class UUIDBinaryCodec class="kw">implements Codec<UUID> {
   class="kw">public UUIDBinaryCodec() {
   }

   @Nonnull
   class="kw">public UUID decode(@Nonnull BsonValue var1, ExtraInfo var2) {
      BsonBinary var3 = var1.asBinary();
      byte var4 = var3.getType();
      if (var4 != BsonBinarySubType.UUID_STANDARD.getValue()) {
         throw new CodecException("Unexpected BsonBinarySubType");
      }

      byte[] var5 = var3.getData();
      class="kw">return uuidFromBytes(var5);
   }

   @Nonnull
   class="kw">public BsonValue encode(@Nonnull UUID var1, ExtraInfo var2) {
      byte[] var3 = new byte[16];
      writeLongToArrayBigEndian(var3, 0, var1.getMostSignificantBits());
      writeLongToArrayBigEndian(var3, 8, var1.getLeastSignificantBits());
      class="kw">return new BsonBinary(BsonBinarySubType.UUID_STANDARD, var3);
   }

   @Nonnull
   class="kw">public UUID decodeJson(@Nonnull RawJsonReader var1, ExtraInfo var2) class="kw">throws IOException {
      if (var1.peekFor('"')) {
         class="kw">return uuidFromHex(var1.readString());
      }

      var1.expect('{');
      var1.consumeWhiteSpace();
      UUID var3 = null;

      while (true) {
         String var4 = var1.readString();
         var1.consumeWhiteSpace();
         var1.expect(':');
         var1.consumeWhiteSpace();
         class="kw">switch (var4) {
            case "$binary":
               var3 = uuidFromHex(var1.readString());
               break;
            case "$type":
               var1.expect('"');
               var1.expect('0');
               var1.expect('4');
               var1.expect('"');
               break;
            class="kw">default:
               throw new IOException("Unknown field '" + var4 + "' when decoding UUID!");
         }

         var1.consumeWhiteSpace();
         if (var1.tryConsumeOrExpect('}', ',')) {
            if (var3 == null) {
               throw new IOException("Expected to find '$binary' field when decoding UUID!");
            }

            class="kw">return var3;
         }

         var1.consumeWhiteSpace();
      }
   }

   class="kw">public class="kw">static void writeLongToArrayBigEndian(@Nonnull byte[] var0, int var1, long var2) {
      var0[var1 + 7] = (byte)(255L & var2);
      var0[var1 + 6] = (byte)(255L & var2 >> 8);
      var0[var1 + 5] = (byte)(255L & var2 >> 16);
      var0[var1 + 4] = (byte)(255L & var2 >> 24);
      var0[var1 + 3] = (byte)(255L & var2 >> 32);
      var0[var1 + 2] = (byte)(255L & var2 >> 40);
      var0[var1 + 1] = (byte)(255L & var2 >> 48);
      var0[var1] = (byte)(255L & var2 >> 56);
   }

   class="kw">public class="kw">static long readLongFromArrayBigEndian(@Nonnull byte[] var0, int var1) {
      long var2 = 0L;
      var2 |= 255L & var0[var1 + 7];
      var2 |= (255L & var0[var1 + 6]) << 8;
      var2 |= (255L & var0[var1 + 5]) << 16;
      var2 |= (255L & var0[var1 + 4]) << 24;
      var2 |= (255L & var0[var1 + 3]) << 32;
      var2 |= (255L & var0[var1 + 2]) << 40;
      var2 |= (255L & var0[var1 + 1]) << 48;
      class="kw">return var2 | (255L & var0[var1]) << 56;
   }

   @Nonnull
   class="kw">public class="kw">static UUID uuidFromBytes(@Nonnull byte[] var0) {
      if (var0.length != 16) {
         throw new CodecException(String.format("Expected length to be 16, not %d.", var0.length));
      } else {
         class="kw">return new UUID(readLongFromArrayBigEndian(var0, 0), readLongFromArrayBigEndian(var0, 8));
      }
   }

   @Nonnull
   class="kw">public class="kw">static UUID uuidFromHex(String var0) {
      class="kw">return uuidFromBytes(Base64.getDecoder().decode(var0));
   }

   @Nonnull
   @Override
   class="kw">public Schema toSchema(@Nonnull SchemaContext var1) {
      StringSchema var2 = new StringSchema();
      var2.setMinLength(24);
      var2.setMaxLength(24);
      var2.setPattern(Codec.BASE64_PATTERN);
      var2.setTitle("UUID Binary");
      class="kw">return var2;
   }
}