我在esb
l上运行了came
,在将我的返回字符串写入缓冲区后,我的client listener
只读取了一些data
。我调试了很多,但找不到合适的解决方案。
public class EsiIncomingStringEncoder extends org.jboss.netty.handler.codec.string.StringEncoder{
IChannelFactory esiChannelDatasource;
public IChannelFactory getEsiChannelDatasource() {
return esiChannelDatasource;
}
public void setEsiChannelDatasource(IChannelFactory esiChannelDatasource) {
this.esiChannelDatasource = esiChannelDatasource;
}
private String convertToString(Object obj, Charset cp) {
if(obj == null)
return "";
if(obj instanceof String)
return (String) obj;
if(obj instanceof byte[])
return new String((byte[])obj, cp);
if(obj instanceof ByteBuffer)
return new String(cp.decode((ByteBuffer)obj).array());
return obj.toString();
}
protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception {
IChannel esiChannel = lookupChannel(channel);
String data = convertToString(msg, esiChannel.getCharset());
//int dataLength = data.length();
logData(channel, dataToSend);
return ChannelBuffers.copiedBuffer(dataToSend, esiChannel.getCharset());
}...
当我调试时,我可以看到"dataToSend"
字符串被正确写入缓冲区,这是123400 byte array
,在我的接收线程中,我只能读取13123
字节,因为我把消息的长度放在第一部分,我的线程等待读取流的其余部分。
如果netty
中有问题在Linux上发送这么大的字节数组,我不会这样做。
PS:如果我使用较短的字符串进行测试,则接收数据没有问题。
PPS:骆驼版2.9.0