Netty在发送时修剪数据

时间:2015-03-23 12:08:45

标签: java tcp apache-camel netty

我在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

0 个答案:

没有答案