急急急,紧急求助JAVA HttpURLConnection获取网络资源问题,在线等~~
//HttpUtils工具类下getUrlInputStream(String urlPath)方法返回输入流public static InputStream getUrlInputStream(String urlPath){
InputStream inputStream = null;
try {
URL url = new URL(urlPath);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
inputStream = connection.getInputStream();
// try {
// Thread.sleep(1000);
// } catch (Exception e) {
// }
} catch (Exception e) {
System.out.println(e);
}
return inputStream;
}
//这是从数据库读取图片路径程序片段,从另一WEB服务器下载图片转换为字符再经JSON传送到客户端
String photoStr = null;
if (rs.getString(14) != null){
photoStr = HttpUtils.doFileStreamToString(HttpUtils.getUrlInputStream("http://10.0.0.43"+rs.getString(14)));
}
user.setMessagerurl(photoStr);
问题出现在获取流那里(getUrlInputStream),如果不加Thread.sleep(1000);获取图片流不完整是怎么回事? HttpURLConnection请求数据不阻塞吗?? 求大神解答下,小弟菜鸟~ 献丑了 Java 网络 URL --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 获取输入流的时候试着转换一下
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"utf-8"));
String line = "";
String result = "";
while(null != (line=br.readLine())){
result += line;
}
return result;
看看这个返回的结果是什么 --------------------编程问答-------------------- HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setReadTimeout(1000);
inputStream = connection.getInputStream();
中间设置个超时时间试试。如果图片很大,可能还是会1秒完成不了。或者设置超时时间为0(不限制)试试。 --------------------编程问答--------------------
还是不行,看了下还是从网络获取流的时候出问题了,图片没下载完毕servlet就返回结果了,下载和bean执行不同步导致只接收到一部分数据。 --------------------编程问答-------------------- 恩,默认读数据时间应该不只一秒所以我没有设置,现在的问题是当程序执行到“connection.getInputStream()”的时候它不会像我们想的那样阻塞掉,等它下载完毕后再执行往后的代码,而是到这里如果不加Thread.sleep瞬间就返回数据了或者说是被网页强制断开了?? 不得而知,估计还是和线程与生命周期有关系(因为桌面程序不加Thread这段代码是没有问题可以获取完整数据的),小弟刚接触JAVA不久很多多谢很模糊,不知道分析是否正确~ --------------------编程问答--------------------
看了connection.getInputStream();的源码也看不出啥,流什么的比较薄弱,就不误导人了。先试下这个方法好不好使吧~ --------------------编程问答-------------------- 我获取的输入流也只有一部分, 很郁闷啊
补充:Java , Web 开发