如何使用InputStream讀取HTTP請求?我用這樣來閱讀:如何正確讀取http請求?
InputStream in = address.openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder result = new StringBuilder();
String line;
while((line = reader.readLine()) != null) {
result.append(line);
}
System.out.println(result.toString());
但reader.readLine()
可能被阻止,因爲沒有保證null
線將到達。當然,我可以讀Content-Length頭,然後在一個循環中讀取請求:
for (int i = 0; i < contentLength; i++) {
int a = br.read();
body.append((char) a);
}
但如果內容長度設置得過大(我想這可以手動設置目的),br.read()
將被阻止。 我嘗試從InputStream中像這樣直接讀取的字節:
byte[] bytes = getBytes(is);
public static byte[] getBytes(InputStream is) throws IOException {
int len;
int size = 1024;
byte[] buf;
if (is instanceof ByteArrayInputStream) {
size = is.available();
buf = new byte[size];
len = is.read(buf, 0, size);
} else {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
buf = new byte[size];
while ((len = is.read(buf, 0, size)) != -1)
bos.write(buf, 0, len);
buf = bos.toByteArray();
}
return buf;
}
但它永遠等待。做什麼?
爲什麼不能保證能夠達到'null'行?根據文檔,如果已經到達流的末尾,它將返回'null'。所以如果連接被關閉,你會在讀完最後一行後得到空值。 –
我可以達到的第一個空行是頭和請求體之間的分隔符(如表單數據)。但身體後面沒有空線。做什麼? – Tony
也許你得到一個空的身體請求? –