SocketChannelについて質問です

ByteBuffer buffer = ByteBuffer.allocate(size);
buffer.clear();
buffer.put(data, 0, size);
buffer.flip(); // A
socketchannel.write(buffer);

このコードが実行される前にsocketchannel.read()は成功していて
受け取ったデータ末尾の文字列が例えばAddDataなら追加して
成功した事を送り返す部分です
dataは既にヘッダや他の情報も整形済みです

Aがあるとwriteで異常終了、Aが無いと何も起きずで困ってます
何が原因かわかる人いたらお願いします