ByteTreeNode
This commit is contained in:
@@ -6,6 +6,7 @@ package org.redkale.convert;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import org.redkale.util.ByteTreeNode;
|
||||
|
||||
/**
|
||||
* 字段的反序列化集合操作类
|
||||
@@ -29,11 +30,12 @@ public class DeMemberInfo {
|
||||
this.members = deMembers;
|
||||
this.memberFieldMap = new HashMap<>(deMembers.length);
|
||||
this.memberTagMap = new HashMap<>(deMembers.length);
|
||||
this.memberNode = new DeMemberNode();
|
||||
for (DeMember member : deMembers) {
|
||||
this.memberFieldMap.put(member.getFieldName(), member);
|
||||
this.memberTagMap.put(member.getTag(), member);
|
||||
this.memberNode.put(member.getFieldName(), member);
|
||||
}
|
||||
this.memberNode = DeMemberNode.create(deMembers);
|
||||
}
|
||||
|
||||
public static DeMemberInfo create(DeMember... deMembers) {
|
||||
@@ -48,7 +50,7 @@ public class DeMemberInfo {
|
||||
return members;
|
||||
}
|
||||
|
||||
public DeMemberNode getMemberNode() {
|
||||
public ByteTreeNode<DeMember> getMemberNode() {
|
||||
return memberNode;
|
||||
}
|
||||
|
||||
@@ -59,4 +61,12 @@ public class DeMemberInfo {
|
||||
public DeMember getMemberByField(String field) {
|
||||
return memberFieldMap.get(field);
|
||||
}
|
||||
|
||||
protected static class DeMemberNode extends ByteTreeNode<DeMember> {
|
||||
|
||||
@Override
|
||||
public void put(String key, DeMember value) {
|
||||
super.put(key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2116 Redkale
|
||||
* All rights reserved.
|
||||
*/
|
||||
package org.redkale.convert;
|
||||
|
||||
/**
|
||||
* 字段的反序列化操作类
|
||||
*
|
||||
* <p>详情见: https://redkale.org
|
||||
*
|
||||
* @author zhangjx
|
||||
* @since 2.8.0
|
||||
*/
|
||||
public class DeMemberNode {
|
||||
|
||||
protected static final int MIN_INDEX = 32;
|
||||
|
||||
protected DeMember value;
|
||||
|
||||
protected DeMemberNode[] nodes = new DeMemberNode[127 - MIN_INDEX];
|
||||
|
||||
public DeMemberNode getNode(char ch) {
|
||||
if (ch <= MIN_INDEX || ch > 127) {
|
||||
return null;
|
||||
}
|
||||
return nodes[ch - MIN_INDEX];
|
||||
}
|
||||
|
||||
public DeMember getMember(String field) {
|
||||
char[] chs = field.toCharArray();
|
||||
DeMemberNode n = this;
|
||||
for (int i = 0; i < chs.length; i++) {
|
||||
n = n.nodes[chs[i] - MIN_INDEX];
|
||||
if (n == null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return n == null ? null : n.value;
|
||||
}
|
||||
|
||||
public DeMember getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
private void add(DeMember member) {
|
||||
char[] chs = member.attribute.field().toCharArray();
|
||||
DeMemberNode n = this;
|
||||
for (int i = 0; i < chs.length; i++) {
|
||||
DeMemberNode s = n.nodes[chs[i] - MIN_INDEX];
|
||||
if (s == null) {
|
||||
s = new DeMemberNode();
|
||||
n.nodes[chs[i] - MIN_INDEX] = s;
|
||||
}
|
||||
n = s;
|
||||
}
|
||||
n.value = member;
|
||||
}
|
||||
|
||||
public static DeMemberNode create(DeMember... members) {
|
||||
DeMemberNode root = new DeMemberNode();
|
||||
for (DeMember member : members) {
|
||||
root.add(member);
|
||||
}
|
||||
return root;
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import java.nio.ByteBuffer;
|
||||
import java.nio.charset.UnmappableCharacterException;
|
||||
import org.redkale.convert.*;
|
||||
import static org.redkale.convert.Reader.*;
|
||||
import org.redkale.util.ByteTreeNode;
|
||||
|
||||
/**
|
||||
* 以ByteBuffer为数据载体的JsonReader <br>
|
||||
@@ -595,7 +596,7 @@ public class JsonByteBufferReader extends JsonReader {
|
||||
if (ch == 0) {
|
||||
return null;
|
||||
}
|
||||
DeMemberNode node = memberInfo.getMemberNode();
|
||||
ByteTreeNode<DeMember> node = memberInfo.getMemberNode();
|
||||
CharArray tmp = array();
|
||||
if (ch == '"' || ch == '\'') {
|
||||
final char quote = ch;
|
||||
|
||||
@@ -10,6 +10,7 @@ import java.util.*;
|
||||
import org.redkale.convert.*;
|
||||
import static org.redkale.convert.Reader.*;
|
||||
import org.redkale.convert.Reader.ValueType;
|
||||
import org.redkale.util.ByteTreeNode;
|
||||
import org.redkale.util.Utility;
|
||||
|
||||
/**
|
||||
@@ -672,7 +673,7 @@ public class JsonReader extends Reader {
|
||||
if (this.position == eof) {
|
||||
return null;
|
||||
}
|
||||
DeMemberNode node = memberInfo.getMemberNode();
|
||||
ByteTreeNode<DeMember> node = memberInfo.getMemberNode();
|
||||
char ch = nextGoodChar(true); // 需要跳过注释
|
||||
final char[] text0 = this.text;
|
||||
int curr = this.position;
|
||||
|
||||
66
src/main/java/org/redkale/util/ByteTreeNode.java
Normal file
66
src/main/java/org/redkale/util/ByteTreeNode.java
Normal file
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2116 Redkale
|
||||
* All rights reserved.
|
||||
*/
|
||||
package org.redkale.util;
|
||||
|
||||
/**
|
||||
* byte树对象, key必须是latin1字符串
|
||||
*
|
||||
* <p>详情见: https://redkale.org
|
||||
*
|
||||
* @author zhangjx
|
||||
* @param <T> T
|
||||
* @since 2.8.0
|
||||
*/
|
||||
public class ByteTreeNode<T> {
|
||||
|
||||
protected T value;
|
||||
|
||||
protected ByteTreeNode<T>[] nodes = new ByteTreeNode[127];
|
||||
|
||||
protected ByteTreeNode() {}
|
||||
|
||||
public static <T> ByteTreeNode<T> create() {
|
||||
return new ByteTreeNode();
|
||||
}
|
||||
|
||||
public ByteTreeNode<T> getNode(byte b) {
|
||||
return b < 0 ? null : nodes[b];
|
||||
}
|
||||
|
||||
public ByteTreeNode<T> getNode(char ch) {
|
||||
return ch >= nodes.length ? null : nodes[ch];
|
||||
}
|
||||
|
||||
public T getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public T getValue(String key) {
|
||||
ByteTreeNode<T> n = this;
|
||||
for (char ch : key.toCharArray()) {
|
||||
n = n.nodes[ch];
|
||||
if (n == null) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return n.value;
|
||||
}
|
||||
|
||||
protected void put(String key, T value) {
|
||||
ByteTreeNode n = this;
|
||||
for (char ch : key.toCharArray()) {
|
||||
if (ch >= nodes.length) {
|
||||
throw new RedkaleException(key + " contains illegal char: " + ch);
|
||||
}
|
||||
ByteTreeNode s = n.nodes[ch];
|
||||
if (s == null) {
|
||||
s = new ByteTreeNode();
|
||||
n.nodes[ch] = s;
|
||||
}
|
||||
n = s;
|
||||
}
|
||||
n.value = value;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user