サーバーからクライアントに「大きな」文字列 (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;
}
}