【问题标题】:InputStream for Objects from HttpURLConnection Not Getting All Data来自 HttpURLConnection 的对象的 InputStream 未获取所有数据
【发布时间】:2016-03-18 02:57:10
【问题描述】:

所以我有一个 HttpURLConnection 连接到某个 URL 上的某个图像。我正在使用 Range 属性下载此图像(在单独的并行连接中下载一个文件)。在我抓住所有零件后,我将它们缝合在一起。除非我尝试用更大的文件做一个 InputStream ,否则一切都很好(这意味着我可以在 200 个并行连接中获得一个文件,但不是 5 个)。

例如:

假设我想下载对象:http://stuorgs.uga.edu/images/spotlight/spotlight_button.png,只需 1 部分。所以我的范围是从字节= 0-max。我的程序创建一个最大大小的字节数组,并将来自 HttpURLConnection 的 InputStream 读入该数组。但是,InputStream 在某个点之后,要么只发送超过 0000,要么提前关闭。

这是我的代码:

try {
    HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
    String bytesToGrab = "bytes=" + startingByte + "-" + endingByte;
    urlConnection.setRequestProperty("Range", bytesToGrab);

    int sizeOfData = endingByte - startingByte;
    byte[] storeData = new byte[sizeOfData];

    InputStream inputStream = urlConnection.getInputStream();
    inputStream.read(storeData);
    inputStream.close();

    createFile(storeData); // this takes the byte array and creates a file with it
} catch (IOException e) {
    System.out.println("Cannot open url connection: " + e);
} 

那么,我的 InputStream 会提前关闭吗?如果是这样,我该如何防止这种情况发生?不然怎么回事?

【问题讨论】:

    标签: java networking httpresponse


    【解决方案1】:

    Javadoc 中没有任何地方声明InputStreamread(byte[]) 填充了缓冲区。 它阻塞直到至少有一个字节的数据可用,然后传输任何可用的数据,并返回传输的字节数。

    你必须循环。或者使用DataInputStream.readFully()

    注意不要在类之后命名变量,也不要以大写字母开头。那是为了上课。

    【讨论】:

      猜你喜欢
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      相关资源
      最近更新 更多