【发布时间】:2014-03-07 14:46:27
【问题描述】:
我有一个 HTML 表单,它向我用 Java 制作的套接字发出 POST 请求。我用
阅读每一行 /**
* Read a line from an {@link InputStream}
* @param inFromClient The {@link InputStream} to read from
* @return The {@link String} read
* @throws IOException When something went wrong while reading
*/
private String readLine(InputStream inFromClient) throws IOException {
StringBuilder lineb = new StringBuilder();
char c = (char) inFromClient.read();
while (c != '\n'){
lineb.append(Character.toString(c));
c = (char) (inFromClient.read());
}
String line = lineb.toString();
return line.substring(0,line.lastIndexOf('\r')<0?0:line.lastIndexOf('\r'));
}
这样,我可以解析请求直到边界,然后保存发送的文件。一切正常。
但是,我也在尝试使用 Java 向同一个套接字发出 POST 请求。首先,我创建了一个连接到我的服务器套接字的第二个套接字。然后我做:
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
pw.println("POST / HTTP/1.1");
pw.println("Host: ...");
...
问题
问题是,我的方法无法读取任何行,最终在第 5 行出现“OutOfMemory”异常。为什么我无法读取从 Java 套接字发送的行,而我可以读取从浏览器发送的行(html 表单)?谢谢。
【问题讨论】:
-
为什么要附加
Character.toString()?StringBuilder有一个 .append() 方法接受char作为参数... -
是的,你是对的,但这并不能解决问题
标签: java sockets post encoding outputstream