62,614
社区成员
发帖
与我相关
我的任务
分享
InputStream.available();
这个函数是非阻塞设计,在网络环境下,一旦遇到阻塞,返回值就会比实际流中的数据量小.
当返回数据较大,需要几个包来分开传送的时候,利用这个函数作为数组上限来获取数据,就会损失数据了...(我就是这样的做,所以数据少了很多很多.只要不用这个函数,用回传统的处理方法就好.
楼上你提供的代码可行...不过我的数据是经过加密的,所以字符流用起来也有很严重的损失.改用对应的字节流就好了.
/**
* a http request with given url
*
* @param strUrl
* the url you want to request
* @return
*/
public static String request(String strUrl) {
strUrl = QuhaoConstant.HTTP_URL + strUrl;
URL url = null;
String result = "";
HttpURLConnection urlConn = null;
InputStreamReader in = null;
try {
url = new URL(strUrl);
urlConn = (HttpURLConnection) url.openConnection();
urlConn.setConnectTimeout(1000 * 20);
in = new InputStreamReader(urlConn.getInputStream());
BufferedReader br = new BufferedReader(in);
String readerLine = null;
while ((readerLine = br.readLine()) != null) {
result += readerLine;
}
in.close();
urlConn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
urlConn.disconnect();
}
return result;
}
InputStream is = con.getInputStream();
//准备字节数组
byte[] b = new byte[is.available()];
//写入数组
while(is.read(b) != -1);
is.close();