当前位置:编程学习 > JAVA >>

急急急,紧急求助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(不限制)试试。 --------------------编程问答--------------------
引用 2 楼 xw4265 的回复:
获取输入流的时候试着转换一下
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"utf-8"));
        String line = "";
        String result = "";
        while(null != (line=br.readLine())){
            result += line;
        }
        return result;

看看这个返回的结果是什么

还是不行,看了下还是从网络获取流的时候出问题了,图片没下载完毕servlet就返回结果了,下载和bean执行不同步导致只接收到一部分数据。 --------------------编程问答--------------------
引用 3 楼 oh_Maxy 的回复:
   HttpURLConnection connection = (HttpURLConnection)url.openConnection();
   connection.setReadTimeout(1000);
   inputStream = connection.getInputStream();

中间设置个超时时间试试。如果图片很大,可能还是会1秒完成不了。或者设置超时时间为0(不限制)试试。
恩,默认读数据时间应该不只一秒所以我没有设置,现在的问题是当程序执行到“connection.getInputStream()”的时候它不会像我们想的那样阻塞掉,等它下载完毕后再执行往后的代码,而是到这里如果不加Thread.sleep瞬间就返回数据了或者说是被网页强制断开了?? 不得而知,估计还是和线程与生命周期有关系(因为桌面程序不加Thread这段代码是没有问题可以获取完整数据的),小弟刚接触JAVA不久很多多谢很模糊,不知道分析是否正确~ --------------------编程问答--------------------
引用 5 楼 laixiangcq 的回复:
Quote: 引用 3 楼 oh_Maxy 的回复:

   HttpURLConnection connection = (HttpURLConnection)url.openConnection();
   connection.setReadTimeout(1000);
   inputStream = connection.getInputStream();

中间设置个超时时间试试。如果图片很大,可能还是会1秒完成不了。或者设置超时时间为0(不限制)试试。
恩,默认读数据时间应该不只一秒所以我没有设置,现在的问题是当程序执行到“connection.getInputStream()”的时候它不会像我们想的那样阻塞掉,等它下载完毕后再执行往后的代码,而是到这里如果不加Thread.sleep瞬间就返回数据了或者说是被网页强制断开了?? 不得而知,估计还是和线程与生命周期有关系(因为桌面程序不加Thread这段代码是没有问题可以获取完整数据的),小弟刚接触JAVA不久很多多谢很模糊,不知道分析是否正确~

看了connection.getInputStream();的源码也看不出啥,流什么的比较薄弱,就不误导人了。先试下这个方法好不好使吧~ --------------------编程问答-------------------- 我获取的输入流也只有一部分, 很郁闷啊
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,