我正在尝试在JAVA中编写我的HttpServer。
一旦用户编写了URL,就会有一个简单的代码来创建套接字(服务器和客户端)以及读取和收集标头的信息。
我正在寻找一种可以操纵数据获取/收集的好方法(性能代码)。
在我写的代码中,我写道,这看起来很糟糕 也许谁可以帮我解释第三级尝试编写好的代码块?
例如,我认为if (headerTempData.contains("\r\n\r\n")) break;
对于流式传输和从连接套接字收集数据将会变慢,因为我不知道将下载多少个标题行,并且对于它检查的所有门控信息
也许谁知道相关文献(书籍等)的其他要点可以帮助我理解http协议代码的良好性能,这对我很有帮助
谢谢!
具体的尝试块代码:
try (InputStream raw = socket.getInputStream()) {
String headerTempData = "";
// chain the InputStream to a Reader
Reader reader = new InputStreamReader(raw);
int c;
while ((c = reader.read()) != -1) {
headerTempData += (char) c;
System.out.print((char) c);
if (headerTempData.contains("\r\n\r\n"))
break;
}
System.out.println("- - - - - - - - - - - - EOL - - - - - - - - - - - -");
}
所有代码示例:
package pk7HttpServer;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Created by Morris on 08/10/16.
*/
public class HTTPServer {
public static void main(String[] args) {
new HTTPServer().startServer();
}
public void startServer() {
try (ServerSocket serverSocket = new ServerSocket(8080)) {
System.out.println("Server is started");
while (true) {
Socket socket = serverSocket.accept();
try {
try (InputStream raw = socket.getInputStream()) {
String headerTempData = "";
// chain the InputStream to a Reader
Reader reader = new InputStreamReader(raw);
int c;
while ((c = reader.read()) != -1) {
headerTempData += (char) c;
System.out.print((char) c);
if (headerTempData.contains("\r\n\r\n"))
break;
}
System.out.println("- - - - - - - - - - - - EOL - - - - - - - - - - - -");
}
} catch (MalformedURLException ex) {
System.err.println(socket.getLocalAddress() + " is not a parseable URL");
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
}
} catch (Exception ex) {
System.out.println("error# " + ex.getMessage());
}
}
}
答案 0 :(得分:1)
你的解析逻辑有几个缺点。