回滚Mask convertFrom 方法
This commit is contained in:
@@ -50,8 +50,6 @@ public abstract class Convert<R extends Reader, W extends Writer> {
|
||||
|
||||
public abstract <T> T convertFrom(final Type type, final byte[] bytes);
|
||||
|
||||
public abstract <T> T convertFrom(final Type type, final ConvertMask mask, final byte[] bytes);
|
||||
|
||||
public abstract <T> T convertFrom(final Type type, final ByteBuffer... buffers);
|
||||
|
||||
public abstract <T> T convertFrom(final Type type, final ConvertMask mask, final ByteBuffer... buffers);
|
||||
|
||||
@@ -115,16 +115,6 @@ public class BsonConvert extends BinaryConvert<BsonReader, BsonWriter> {
|
||||
return convertFrom(type, bytes, 0, bytes.length);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T convertFrom(final Type type, final ConvertMask mask, final byte[] bytes) {
|
||||
if (type == null) return null;
|
||||
final BsonMaskReader in = new BsonMaskReader(mask);
|
||||
in.setBytes(bytes, 0, bytes.length);
|
||||
@SuppressWarnings("unchecked")
|
||||
T rs = (T) factory.loadDecoder(type).convertFrom(in);
|
||||
return rs;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> T convertFrom(final Type type, final byte[] bytes, final int start, final int len) {
|
||||
if (type == null) return null;
|
||||
|
||||
@@ -1,137 +0,0 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package org.redkale.convert.bson;
|
||||
|
||||
import java.util.Objects;
|
||||
import org.redkale.convert.*;
|
||||
import static org.redkale.convert.Reader.SIGN_NULL;
|
||||
import org.redkale.convert.ext.ByteSimpledCoder;
|
||||
import org.redkale.util.Utility;
|
||||
|
||||
/**
|
||||
* BSON数据源
|
||||
*
|
||||
* <p>
|
||||
* 详情见: https://redkale.org
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class BsonMaskReader extends BsonReader {
|
||||
|
||||
protected ConvertMask mask;
|
||||
|
||||
public BsonMaskReader(ConvertMask mask) {
|
||||
Objects.requireNonNull(mask);
|
||||
this.mask = mask;
|
||||
}
|
||||
|
||||
public void setMask(ConvertMask mask) {
|
||||
this.mask = mask;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean recycle() {
|
||||
boolean rs = super.recycle();
|
||||
this.mask = null;
|
||||
return rs;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected byte currentByte() {
|
||||
return mask.unmask(content[this.position]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readMapB(DeMember member, byte[] typevals, Decodeable keyDecoder, Decodeable valueDecoder) {
|
||||
short bt = readShort();
|
||||
if (bt == Reader.SIGN_NULL) return bt;
|
||||
int rs = (bt & 0xffff) << 16 | ((mask.unmask(content[++this.position]) & 0xff) << 8) | (mask.unmask(content[++this.position]) & 0xff);
|
||||
byte kt = readByte();
|
||||
byte vt = readByte();
|
||||
if (typevals != null) {
|
||||
typevals[0] = kt;
|
||||
typevals[1] = vt;
|
||||
}
|
||||
return rs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readArrayB(DeMember member, byte[] typevals, Decodeable componentDecoder) { //componentDecoder可能为null
|
||||
short bt = readShort();
|
||||
if (bt == Reader.SIGN_NULL) return bt;
|
||||
int rs = (bt & 0xffff) << 16 | ((mask.unmask(content[++this.position]) & 0xff) << 8) | (mask.unmask(content[++this.position]) & 0xff);
|
||||
if (componentDecoder != null && componentDecoder != ByteSimpledCoder.instance) {
|
||||
byte comval = readByte();
|
||||
if (typevals != null) typevals[0] = comval;
|
||||
}
|
||||
return rs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean readBoolean() {
|
||||
return mask.unmask(content[++this.position]) == 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte readByte() {
|
||||
return mask.unmask(content[++this.position]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public char readChar() {
|
||||
return (char) ((0xff00 & (mask.unmask(content[++this.position]) << 8)) | (0xff & mask.unmask(content[++this.position])));
|
||||
}
|
||||
|
||||
@Override
|
||||
public short readShort() {
|
||||
return (short) ((0xff00 & (mask.unmask(content[++this.position]) << 8)) | (0xff & mask.unmask(content[++this.position])));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readInt() {
|
||||
return ((mask.unmask(content[++this.position]) & 0xff) << 24) | ((mask.unmask(content[++this.position]) & 0xff) << 16)
|
||||
| ((mask.unmask(content[++this.position]) & 0xff) << 8) | (mask.unmask(content[++this.position]) & 0xff);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long readLong() {
|
||||
return ((((long) mask.unmask(content[++this.position]) & 0xff) << 56)
|
||||
| (((long) mask.unmask(content[++this.position]) & 0xff) << 48)
|
||||
| (((long) mask.unmask(content[++this.position]) & 0xff) << 40)
|
||||
| (((long) mask.unmask(content[++this.position]) & 0xff) << 32)
|
||||
| (((long) mask.unmask(content[++this.position]) & 0xff) << 24)
|
||||
| (((long) mask.unmask(content[++this.position]) & 0xff) << 16)
|
||||
| (((long) mask.unmask(content[++this.position]) & 0xff) << 8)
|
||||
| (((long) mask.unmask(content[++this.position]) & 0xff)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readSmallString() {
|
||||
int len = 0xff & readByte();
|
||||
if (len == 0) return "";
|
||||
byte[] bs = new byte[len];
|
||||
for (int i = 0; i < bs.length; i++) {
|
||||
bs[i] = mask.unmask(content[++this.position]);
|
||||
}
|
||||
String value = new String(bs);
|
||||
this.position += len - 1; //上一行已经++this.position,所以此处要-1
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readString() {
|
||||
int len = readInt();
|
||||
if (len == SIGN_NULL) return null;
|
||||
if (len == 0) return "";
|
||||
byte[] bs = new byte[len];
|
||||
for (int i = 0; i < bs.length; i++) {
|
||||
bs[i] = mask.unmask(content[++this.position]);
|
||||
}
|
||||
String value = new String(Utility.decodeUTF8(bs, 0, len));
|
||||
this.position += len - 1;//上一行已经++this.position,所以此处要-1
|
||||
return value;
|
||||
}
|
||||
}
|
||||
@@ -36,7 +36,7 @@ public class BsonReader extends Reader {
|
||||
|
||||
protected int position = -1;
|
||||
|
||||
protected byte[] content;
|
||||
private byte[] content;
|
||||
|
||||
public BsonReader() {
|
||||
}
|
||||
|
||||
@@ -106,16 +106,6 @@ public class JsonConvert extends TextConvert<JsonReader, JsonWriter> {
|
||||
return convertFrom(type, new String(bytes, StandardCharsets.UTF_8));
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T convertFrom(final Type type, final ConvertMask mask, final byte[] bytes) {
|
||||
if (mask == null) return convertFrom(type, bytes);
|
||||
byte[] bs = new byte[bytes.length];
|
||||
for (int i = 0; i < bytes.length; i++) {
|
||||
bs[i] = mask.unmask(bytes[i]);
|
||||
}
|
||||
return convertFrom(type, new String(bs, StandardCharsets.UTF_8));
|
||||
}
|
||||
|
||||
public <T> T convertFrom(final Type type, final String text) {
|
||||
if (text == null) return null;
|
||||
return convertFrom(type, Utility.charArray(text));
|
||||
|
||||
Reference in New Issue
Block a user