求助!java HttpURLConnection获取网络图片问题~
//HttpUtils工具类下getUrlInputStream(StringurlPath)方法返回输入流publicstaticInputStreamgetUrlIn...
//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);
问题出现在获取流那里如果,不加Thread.sleep(1000);获取图片流不完整是怎么回事?求大神解答下,小弟菜鸟~ 献丑了 展开
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);
问题出现在获取流那里如果,不加Thread.sleep(1000);获取图片流不完整是怎么回事?求大神解答下,小弟菜鸟~ 献丑了 展开
展开全部
这是因为..getInputStream().你想..你现在是从URL 里获取一个流对吧..URL 是网络的概念.网络传输数据是需要时间的.你的字节可能还没完全传输完,这时候,你就开始了你后面的传送业务逻辑..当然是不完整的.
追问
哦,是这样啊~ 那就是说网页程序执行到connection.getInputStream()的时候不会阻塞咯?还是提前被网页结束了这段代码的执行?因为我想桌面程序用这段代码不加thread.sleep是可以完整获取数据的,因为它执行到connection.getInputStream()时这个应用的生命周期还没有结束或者说是没有被关闭,不知道理解的是否正确?
追答
不知道你有没听说过这个例子:JAVA I/O.就好象是一个管道.然后呢,数据是从管道的进口进入,出口出来.这个管道的横截面是固定的,也就是说,一次性能通过的数据是有限制的.假如数据多了,就会在后面进行排队等待传输.
所以我觉得可以这样理解,你上面这个传输图片的例子,如果不sleep的话,可能你读取的数据只是从这个管道里已经输出的那部分,而实际上可能还有部分数据还在管道里,这样就造成了,你读取的图片不完整的结果,但是,如果让数据输送这个线程睡一会.等数据从管理里完全出来了,图片就完整了.
我觉得你可以做个实验,你把Thread.sleep(1000); 改成睡500 ,再改成睡50 .分别试试..我推测,,
你收到的图片完整度可能是不一样的.期待你给个结果..谢谢
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询