我现在使用的代码:
Pooled<ByteBuffer> pooledByteBuffer = exchange.getConnection().getBufferPool().allocate();
ByteBuffer byteBuffer = pooledByteBuffer.getResource();
int limit = byteBuffer.limit();
byteBuffer.clear();
exchange.getRequestChannel().read(byteBuffer);
int pos = byteBuffer.position();
byteBuffer.rewind();
byte[] bytes = new byte[pos];
byteBuffer.get(bytes);
String requestBody = new String(bytes, Charset.forName("UTF-8") );
byteBuffer.clear();
pooledByteBuffer.free();
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常但我不确定是否需要clear()ByteBuffer才能将其返回池中.我甚至不确定使用exchange.getConnection().getBufferPool().allocate();.文档中没有太多关于它的内容.
要以非阻塞方式执行此操作,请参阅io.undertow.io.Receiver接口。处理程序的示例可以是:
pathHandler.put("/test", new HttpHandler() {
@Override
public void handleRequest(HttpServerExchange exchange) throws Exception {
exchange.getRequestReceiver().receiveFullBytes(new FullBytesCallback() {
@Override
public void handle(HttpServerExchange exchange, byte[] message) {
System.out.println(new String(message));
}
});
exchange.getResponseSender().send("Hello World");
}
});
Run Code Online (Sandbox Code Playgroud)
或者对于 Java 8:
pathHandler.put("/test", (ex) -> {
ex.getRequestReceiver().receiveFullBytes((e, m) -> {
System.out.println(new String(m));
});
ex.getResponseSender().send("Hello World");
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6574 次 |
| 最近记录: |