我试图从我的服务器向我的客户端写入一个“大”字符串(986 个字符),但在读取 16 个字符后出现以下错误:
not enough readable bytes - need 2, maximum is 0.
它在发送较小的字符串时可以正常工作,但是对于这么多的字符会引发此错误。
我们使用BigEndianHeapChannelBuffer来接收我们的数据。
write 的 obj.length() 和 read 的 buffer.readUnsignedShort() 都给出了相同的(正确的)数字,但其余的它在 for 循环中崩溃。
Netty 版本是 3.5.10 FINAL
有人知道如何解决这个问题吗?请询问您是否需要更多信息。
以下是一些代码片段:
写信给流:
public void addString(String obj)
{
try
{
bodystream.writeShort(obj.length());
bodystream.writeChars(obj);
System.out.println("Server wrote bytes: " + obj.length());
message = message + ";STRING: " + obj;
// bodystream.w(obj);
}
catch(IOException e)
{
}
}
从流中阅读:
public String readString()
{
try
{
int len = buffer.readUnsignedShort();
System.out.println("Client can read bytes: " + len);
char[] characters = new char[len];
for(int i = 0; i < len; i++)
characters[i] = buffer.readChar();
return new String(characters);
}
catch(Exception e)
{
System.err.println(e.getMessage());
return "";
}
}
解码:
public class NetworkDecoder extends FrameDecoder
{
@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer)
{
try
{
int opcode = buffer.readUnsignedByte();
System.out.println("[In] <- " + opcode);
return new ServerMessage(buffer, opcode);
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
}