我正在使用java 1.7中的SCTP内置实现。我用它来编写客户端服务器应用程序。我使用以下代码:
public void sendMessage(byte[] buffer, int length, boolean flush) throws Exception {
logger.debug("Sending message length: {}, data: \n{}", length, debugData(buffer, 0, length, 256, true));
ByteBuffer bb = ByteBuffer.wrap(buffer, 0, length);
final MessageInfo messageInfo = MessageInfo.createOutgoing(null, 0);
synchronized (sc){
sc.send(bb, messageInfo);
}
logger.debug("Finished sending message length: {}", length);
}
public int readMessage(byte[] readBuf) throws Exception {
ByteBuffer buf = ByteBuffer.wrap(readBuf, 0, BinaryMessageBase.BUFFER_SIZE);
MessageInfo messageInfo = null;
do {
try {
messageInfo = sc.receive(buf, null, null);
} catch (IOException e) {
e.printStackTrace();
System.out.println(e.getMessage());
throw e;
}
} while (messageInfo == null || !messageInfo.isComplete());
return messageInfo.bytes();
}
代码中引用的sc是SctpChannel对象。 readMessage方法只是从线路上抓取一条消息,并将其放入缓冲区。然后sc.recieve填充MessageInfo,直到捕获完整的消息。使用jvisualvm进行分析表明,readMessage方法是迄今为止最慢的。我无法真正看到任何优化,因为它没有太多代码。我们将非常感谢您的想法。