我正在尝试仅使用Socket类在Java中编写HTTP代理。我曾尝试先构造一个,我通过写入套接字的输出流成功发送请求但是我很难读取响应。我进行的研究表明我应该使用输入流并逐行读取,但我无法使用此方法成功读取任何网页。对于我可以从这里去哪里,有人会有任何建议吗?
我的代码实际上使用字节缓冲区来读取输入流,以便以字节为单位读取页面:
InputStream input = clientSocket.getInputStream()
byte[] buffer = new byte[48*1024];
byte[] redData;
StringBuilder clientData = new StringBuilder();
String redDataText;
int red;
while((red = input.read(buffer)) > -1) {
redData = new byte[red];
System.arraycopy(buffer, 0, redData, 0, red);
redDataText = new String(redData, "UTF-8");
System.out.println("Got message!! " + redDataText);
clientData.append(redDataText);
}
答案 0 :(得分:-1)
如果您想要一种按行读取InputStream的方法,可以使用此方法:
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(input, "UTF-8"));
String line;
StringBuilder clientData=new StringBuilder();
while ((line=bufferedReader.readLine()) != null)
{
clientData.append(line);
}
除非您事先确定它包含纯文本(而不是二进制数据),否则必须小心不要以这种方式读取InputStream。
BTW:为了提高效率,我建议您根据最终大小预先设置初始大小的clientData(如果没有,它将从默认大小10开始,需要重新调整大小更多次)。