@Override public <T> T deserialize(byte[] data, Class<T> clazz) throws Exception { return getRemotingSerializable().deserialize(data, clazz); } }
@Override public byte[] serialize(Object obj) throws Exception { return getRemotingSerializable().serialize(obj); }
@Override public int getId() { return getRemotingSerializable().getId(); }
protected RemotingSerializable getRemotingSerializable(int serializableTypeId) { RemotingSerializable serializable = null; if (serializableTypeId > 0) { serializable = AdaptiveSerializable.getSerializableById(serializableTypeId); if (serializable == null) { throw new IllegalArgumentException("Can not support RemotingSerializable that serializableTypeId=" + serializableTypeId); } } else { serializable = ServiceLoader.load(RemotingSerializable.class, Constants.ADAPTIVE); } return serializable; }
@Override public <T> T deserialize(byte[] data, Class<T> clazz) throws Exception { final String json = new String(data, Charset.forName("UTF-8")); return fromJson(json, clazz); }
public byte[] serialize(Object obj) throws Exception { String json = toJson(obj, false); return json.getBytes(Charset.forName("UTF-8")); }
private void setSpiConfig() { // 设置默认序列化方式 String defaultSerializable = config.getParameter(ExtConfig.REMOTING_SERIALIZABLE_DFT); if (StringUtils.isNotEmpty(defaultSerializable)) { AdaptiveSerializable.setDefaultSerializable(defaultSerializable); } // 设置json String ltsJson = config.getParameter(ExtConfig.LTS_JSON); if (StringUtils.isNotEmpty(ltsJson)) { JSONFactory.setJSONAdapter(ltsJson); } // 设置logger String logger = config.getParameter(ExtConfig.LTS_LOGGER); if (StringUtils.isNotEmpty(logger)) { LoggerFactory.setLoggerAdapter(logger); } }
@Override public RemotingCommand decode(ByteBuffer byteBuffer) throws Exception { int length = byteBuffer.limit(); int serializableId = byteBuffer.getInt(); RemotingSerializable serializable = getRemotingSerializable(serializableId); int headerLength = byteBuffer.getInt(); byte[] headerData = new byte[headerLength]; byteBuffer.get(headerData); RemotingCommand cmd = serializable.deserialize(headerData, RemotingCommand.class); int remaining = length - 4 - 4 - headerLength; if (remaining > 0) { int bodyLength = byteBuffer.getInt(); int bodyClassLength = remaining - 4 - bodyLength; if (bodyLength > 0) { byte[] bodyData = new byte[bodyLength]; byteBuffer.get(bodyData); byte[] bodyClassData = new byte[bodyClassLength]; byteBuffer.get(bodyClassData); cmd.setBody((RemotingCommandBody) serializable.deserialize(bodyData, Class.forName(new String(bodyClassData)))); } } return cmd; }
@Override public <T> T deserialize(byte[] data, Class<T> clazz) throws Exception { return getRemotingSerializable().deserialize(data, clazz); } }
@Override public byte[] serialize(Object obj) throws Exception { return getRemotingSerializable().serialize(obj); }
@Override public int getId() { return getRemotingSerializable().getId(); }
protected RemotingSerializable getRemotingSerializable(int serializableTypeId) { RemotingSerializable serializable = null; if (serializableTypeId > 0) { serializable = AdaptiveSerializable.getSerializableById(serializableTypeId); if (serializable == null) { throw new IllegalArgumentException("Can not support RemotingSerializable that serializableTypeId=" + serializableTypeId); } } else { serializable = ServiceLoader.load(RemotingSerializable.class, Constants.ADAPTIVE); } return serializable; }
@Override public <T> T deserialize(byte[] data, Class<T> clazz) throws Exception { final String json = new String(data, Charset.forName("UTF-8")); return fromJson(json, clazz); }
public byte[] serialize(Object obj) throws Exception { String json = toJson(obj, false); return json.getBytes(Charset.forName("UTF-8")); }
private void setSpiConfig() { // 设置默认序列化方式 String defaultSerializable = config.getParameter(ExtConfig.REMOTING_SERIALIZABLE_DFT); if (StringUtils.isNotEmpty(defaultSerializable)) { AdaptiveSerializable.setDefaultSerializable(defaultSerializable); } // 设置json String ltsJson = config.getParameter(ExtConfig.LTS_JSON); if (StringUtils.isNotEmpty(ltsJson)) { JSONFactory.setJSONAdapter(ltsJson); } // 设置logger String logger = config.getParameter(ExtConfig.LTS_LOGGER); if (StringUtils.isNotEmpty(logger)) { LoggerFactory.setLoggerAdapter(logger); } }
@Override public RemotingCommand decode(ByteBuffer byteBuffer) throws Exception { int length = byteBuffer.limit(); int serializableId = byteBuffer.getInt(); RemotingSerializable serializable = getRemotingSerializable(serializableId); int headerLength = byteBuffer.getInt(); byte[] headerData = new byte[headerLength]; byteBuffer.get(headerData); RemotingCommand cmd = serializable.deserialize(headerData, RemotingCommand.class); int remaining = length - 4 - 4 - headerLength; if (remaining > 0) { int bodyLength = byteBuffer.getInt(); int bodyClassLength = remaining - 4 - bodyLength; if (bodyLength > 0) { byte[] bodyData = new byte[bodyLength]; byteBuffer.get(bodyData); byte[] bodyClassData = new byte[bodyClassLength]; byteBuffer.get(bodyClassData); cmd.setBody((RemotingCommandBody) serializable.deserialize(bodyData, Class.forName(new String(bodyClassData)))); } } return cmd; }
@Override public <T> T deserialize(byte[] data, Class<T> clazz) throws Exception { return getRemotingSerializable().deserialize(data, clazz); } }
@Override public byte[] serialize(Object obj) throws Exception { return getRemotingSerializable().serialize(obj); }