我想创建一个使用Java NIO的HTTP静态文件服务器,它适用于小文件,但似乎会截断较大文件的HTTP响应(3.8 MB图像中有672 KB根据我的Chrome Inspector返回,并且我的浏览器显示部分损坏的图像)。这段代码是否错误?NIO Http文件服务器 - 连接过早关闭
(我知道这是你现有的库,最终我将使用一个在我的项目,但最初我想实现一个基本的自己,看看我的项目的概念是可行的。)
Iterator keys = selector.selectedKeys().iterator();
while (keys.hasNext()) {
SelectionKey key = keys.next();
keys.remove();
if (key.isAcceptable()) {
// New Client encountered
serverSocket.accept().configureBlocking(false)
.register(selector, SelectionKey.OP_READ);
} else if (key.isReadable()) {
// Additional data for existing client encountered
SocketChannel selectedClient = (SocketChannel) key.channel();
ByteBuffer buffer = ByteBuffer.allocate(548);
String requestedFile2 = getRequstedFile(key, selectedClient, buffer);
buffer.clear();
buffer.flip();
FileChannel fc = FileChannel.open(Paths.get(requestedFile2));
String string = "HTTP/1.1 200 Ok\nContent-Type: image/jpeg\nContent-Length: "
+ (Files.size(Paths.get(requestedFile2)) + "\n\n");
selectedClient.write(ByteBuffer.wrap(string.getBytes()));
while (fc.read(buffer) > -1) {
buffer.flip(); // read from the buffer
selectedClient.write(buffer);
buffer.clear();
}
selectedClient.close();
}
}
(异常处理等为简洁起见省略)
EDIT
我有一个内容长度失配错误消息。那么,使用NIO API读取文件内容时,确定HTTP响应大小的正确方法是什么?