Странная ошибка indexOutOfBound из NetBy ChannelBuffer.read? - PullRequest
0 голосов
/ 13 июля 2010

У меня есть следующий простой код в моем проекте netty, он ожидает чтения целого числа из апстрима. Нет кодера в конвейере.

public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
        ChannelBuffer m = (ChannelBuffer) e.getMessage();

        m.readInt() 
    }

Когда данные поступают из сети, метод запускается корректно (хороший знак), но при попытке чтения выдает следующую ошибку:

java.lang.IndexOutOfBoundsException
    at org.jboss.netty.buffer.AbstractChannelBuffer.checkReadableBytes(AbstractChannelBuffer.java:657)
    at org.jboss.netty.buffer.AbstractChannelBuffer.readInt(AbstractChannelBuffer.java:272)
    at PushServer.Netty.PushClientHandler.messageReceived(PushClientHandler.java:33)
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
    at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
    at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:281)
    at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:201)
    at org.jboss.netty.util.internal.IoWorkerRunnable.run(IoWorkerRunnable.java:46)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:637)

Есть идеи?

1 Ответ

3 голосов
/ 13 июля 2010

Возможно, у вас нет декодера в вашем конвейере? Даже если ваш коллега записал 4 байта, вы можете получить менее 4 байтов, и, следовательно, есть высокий шанс получить IOOBE. На самом деле, раздел в официальном руководстве пользователя объясняет точно такой же случай.

...