验证是否错误
parent
5148e6544c
commit
c97e6603ff
|
@ -40,6 +40,8 @@ public interface JfireSE
|
|||
|
||||
ClassInfo find(int classId);
|
||||
|
||||
Object readByUnderInstanceIdFlag(ByteArray byteArray, byte flag);
|
||||
|
||||
Object readByNameIdContent(ByteArray byteArray, boolean refTracking);
|
||||
|
||||
Object readByIdInstanceId(ByteArray byteArray);
|
||||
|
|
|
@ -173,6 +173,42 @@ public class JfireSEImpl implements JfireSE
|
|||
return deSerializedClassInfos[classId];
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object readByUnderInstanceIdFlag(ByteArray byteArray, byte flag)
|
||||
{
|
||||
switch (flag)
|
||||
{
|
||||
case JfireSE.NAME_ID_CONTENT_TRACK ->
|
||||
{
|
||||
byte[] classNameBytes = byteArray.readBytesWithSizeEmbedded();
|
||||
int classId = byteArray.readPositiveVarInt();
|
||||
ClassInfo classInfo = find(classNameBytes, classId);
|
||||
return refTracking ? classInfo.readWithTrack(byteArray) : classInfo.readWithoutTrack(byteArray);
|
||||
}
|
||||
case JfireSE.NAME_ID_CONTENT_UN_TRACK ->
|
||||
{
|
||||
byte[] classNameBytes = byteArray.readBytesWithSizeEmbedded();
|
||||
int classId = byteArray.readPositiveVarInt();
|
||||
return find(classNameBytes, classId).readWithoutTrack(byteArray);
|
||||
}
|
||||
case JfireSE.ID_INSTANCE_ID ->
|
||||
{
|
||||
return find(byteArray.readPositiveVarInt()).getInstanceById(byteArray.readPositiveVarInt());
|
||||
}
|
||||
case JfireSE.ID_CONTENT_TRACK ->
|
||||
{
|
||||
int classId = byteArray.readPositiveVarInt();
|
||||
return find(classId).readWithTrack(byteArray);
|
||||
}
|
||||
case JfireSE.ID_CONTENT_UN_TRACK ->
|
||||
{
|
||||
int classId = byteArray.readPositiveVarInt();
|
||||
return find(classId).readWithoutTrack(byteArray);
|
||||
}
|
||||
default -> throw new RuntimeException("未知的序列化类型");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object readByNameIdContent(ByteArray byteArray, boolean refTracking)
|
||||
{
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package com.jfirer.se2.serializer;
|
||||
|
||||
import com.jfirer.se2.JfireSE;
|
||||
import com.jfirer.se2.JfireSEImpl;
|
||||
import com.jfirer.se2.serializer.impl.ArraySerializer;
|
||||
import com.jfirer.se2.serializer.impl.BoxedArraySerializer;
|
||||
import com.jfirer.se2.serializer.impl.BoxedTypeSerializer;
|
||||
import com.jfirer.se2.serializer.impl.ObjectSerializer.ObjectSerializer;
|
||||
import com.jfirer.se2.serializer.impl.PrimitiveArraySerializer;
|
||||
|
||||
|
@ -35,6 +35,7 @@ public class SerializerFactory
|
|||
store.put(Double[].class, new BoxedArraySerializer.DoubleArraySerializer());
|
||||
store.put(Float[].class, new BoxedArraySerializer.FloatArraySerializer());
|
||||
store.put(String[].class, new BoxedArraySerializer.StringArraySerializer());
|
||||
store.put(String.class, new BoxedTypeSerializer.StringSerializer());
|
||||
}
|
||||
|
||||
public Serializer getSerializer(Class<?> clazz)
|
||||
|
|
|
@ -8,6 +8,8 @@ import com.jfirer.se2.serializer.Serializer;
|
|||
|
||||
import java.lang.reflect.Array;
|
||||
|
||||
import static com.jfirer.se2.JfireSE.*;
|
||||
|
||||
public class ArraySerializer<T> implements Serializer
|
||||
{
|
||||
private Class<?> componentType;
|
||||
|
@ -68,11 +70,8 @@ public class ArraySerializer<T> implements Serializer
|
|||
{
|
||||
switch (flag)
|
||||
{
|
||||
case JfireSE.NAME_ID_CONTENT_TRACK -> arr[i] = (T) jfireSE.readByNameIdContent(byteArray, true);
|
||||
case JfireSE.NAME_ID_CONTENT_UN_TRACK -> arr[i] = (T) jfireSE.readByNameIdContent(byteArray, false);
|
||||
case JfireSE.ID_INSTANCE_ID -> arr[i] = (T) jfireSE.readByIdInstanceId(byteArray);
|
||||
case JfireSE.ID_CONTENT_TRACK -> arr[i] = (T) jfireSE.readByIdContent(byteArray, true);
|
||||
case JfireSE.ID_CONTENT_UN_TRACK -> arr[i] = (T) jfireSE.readByIdContent(byteArray, false);
|
||||
case NAME_ID_CONTENT_TRACK, NAME_ID_CONTENT_UN_TRACK, ID_INSTANCE_ID, ID_CONTENT_TRACK,
|
||||
ID_CONTENT_UN_TRACK -> arr[i] = (T) jfireSE.readByUnderInstanceIdFlag(byteArray, flag);
|
||||
case JfireSE.INSTANCE_ID -> arr[i] = (T) typeDefinedClassInfo.getInstanceById(byteArray.readPositiveVarInt());
|
||||
case JfireSE.CONTENT_TRACK -> arr[i] = (T) typeDefinedClassInfo.readWithTrack(byteArray);
|
||||
case JfireSE.CONTENT_UN_TRACK -> arr[i] = (T) typeDefinedClassInfo.readWithoutTrack(byteArray);
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
package com.jfirer.se2.serializer.impl;
|
||||
|
||||
import com.jfirer.se2.ByteArray;
|
||||
import com.jfirer.se2.classinfo.RefTracking;
|
||||
import com.jfirer.se2.serializer.Serializer;
|
||||
|
||||
public abstract class BoxedTypeSerializer implements Serializer
|
||||
{
|
||||
public static class StringSerializer extends BoxedTypeSerializer
|
||||
{
|
||||
@Override
|
||||
public void writeBytes(ByteArray byteArray, Object instance)
|
||||
{
|
||||
byteArray.writeString((String) instance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object read(ByteArray byteArray, RefTracking refTracking)
|
||||
{
|
||||
String s = byteArray.readString();
|
||||
if (refTracking != null)
|
||||
{
|
||||
refTracking.addTracking(s);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -471,15 +471,11 @@ public class ObjectSerializer implements Serializer
|
|||
readBody.append("else{\r\n");
|
||||
readBody.append("switch(" + flagName + "){\r\n");
|
||||
readBody.append("""
|
||||
case JfireSE.NAME_ID_CONTENT_TRACK-> UNSAFE.putReference(instance,offset, jfireSE.readByNameIdContent(byteArray, true));
|
||||
case JfireSE.NAME_ID_CONTENT_UN_TRACK->UNSAFE.putReference(instance,offset, jfireSE.readByNameIdContent(byteArray, false));
|
||||
case JfireSE.ID_INSTANCE_ID->UNSAFE.putReference(instance,offset, jfireSE.readByIdInstanceId(byteArray));
|
||||
case JfireSE.ID_CONTENT_TRACK->UNSAFE.putReference(instance,offset, jfireSE.readByIdContent(byteArray, true));
|
||||
case JfireSE.ID_CONTENT_UN_TRACK-> UNSAFE.putReference(instance,offset, jfireSE.readByIdContent(byteArray, false));
|
||||
case JfireSE.NAME_ID_CONTENT_TRACK,JfireSE.NAME_ID_CONTENT_UN_TRACK,JfireSE.ID_INSTANCE_ID,JfireSE.ID_CONTENT_TRACK,JfireSE.ID_CONTENT_UN_TRACK-> UNSAFE.putReference(instance,offset, jfireSE.readByUnderInstanceIdFlag(byteArray, flag));
|
||||
case JfireSE.INSTANCE_ID -> UNSAFE.putReference(instance,offset, firstClassInfo.getInstanceById(byteArray.readPositiveVarInt()));
|
||||
case JfireSE.CONTENT_TRACK -> UNSAFE.putReference(instance,offset, firstClassInfo.readWithTrack(byteArray));
|
||||
case JfireSE.CONTENT_UN_TRACK -> UNSAFE.putReference(instance,offset, firstClassInfo.readWithoutTrack(byteArray));
|
||||
""".replace("offset", String.valueOf(l)) .replace("firstClassInfo", firstClassInfoProperty));
|
||||
""".replace("offset", String.valueOf(l)).replace("firstClassInfo", firstClassInfoProperty).replace("flag", flagName));
|
||||
readBody.append("default -> throw new RuntimeException(\"flag:\" + " + flagName + ");\r\n");
|
||||
readBody.append("}\r\n");
|
||||
readBody.append("}\r\n");
|
||||
|
|
|
@ -76,11 +76,7 @@ public class VariableFieldInfo extends FieldInfo
|
|||
{
|
||||
switch (flag)
|
||||
{
|
||||
case JfireSE.NAME_ID_CONTENT_TRACK -> accessor.setObject(instance, jfireSE.readByNameIdContent(byteArray, true));
|
||||
case JfireSE.NAME_ID_CONTENT_UN_TRACK -> accessor.setObject(instance, jfireSE.readByNameIdContent(byteArray, false));
|
||||
case JfireSE.ID_INSTANCE_ID -> accessor.setObject(instance, jfireSE.readByIdInstanceId(byteArray));
|
||||
case JfireSE.ID_CONTENT_TRACK -> accessor.setObject(instance, jfireSE.readByIdContent(byteArray, true));
|
||||
case JfireSE.ID_CONTENT_UN_TRACK -> accessor.setObject(instance, jfireSE.readByIdContent(byteArray, false));
|
||||
case JfireSE.NAME_ID_CONTENT_TRACK,JfireSE.NAME_ID_CONTENT_UN_TRACK, JfireSE.ID_INSTANCE_ID,JfireSE.ID_CONTENT_TRACK,JfireSE.ID_CONTENT_UN_TRACK -> accessor.setObject(instance, jfireSE.readByUnderInstanceIdFlag(byteArray, flag));
|
||||
case JfireSE.INSTANCE_ID -> accessor.setObject(instance, firstClassInfo.getInstanceById(byteArray.readPositiveVarInt()));
|
||||
case JfireSE.CONTENT_TRACK -> accessor.setObject(instance, firstClassInfo.readWithTrack(byteArray));
|
||||
case JfireSE.CONTENT_UN_TRACK -> accessor.setObject(instance, firstClassInfo.readWithoutTrack(byteArray));
|
||||
|
|
Loading…
Reference in New Issue