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;
}
}