URLConnection返回空的inputStream

时间:2014-04-18 19:44:07

标签: java url inputstream httpurlconnection urlconnection

我正在尝试从URL Connection获取输入流pdf,但我得到一个空输入流。任何人都可以告诉我,我做错了什么?以下是代码:

<!-- language: java -->

URL fileUrl = new URL("https://www.dropbox.com/s/ao3up7xudju4qm0/Amalgabond%20Adhesive%20Agent.pdf");
HttpURLConnection connection = (HttpURLConnection)fileUrl.openConnection();
connection.connect(); 
InputStream is = connection.getInputStream();
Log.i("TAG", "is.available(): " + is.available());

is.available()正在返回0空流。

3 个答案:

答案 0 :(得分:3)

根据javadoc,available()不会阻止并等到所有数据都可用,所以在调用它时你可能还没有完全收到你的东西。

你应该使用这样的东西而不是available():

int bytesRead;
byte[] buffer = new byte[100000];

while((bytesRead = is.read(buffer)) > 0){

    // Do something here with buffer
}

read()是一种阻止方法。

答案 1 :(得分:0)

您正在滥用available()方法。它没有告诉你输入流的长度,因此它返回零的事实并不表示它是空的。请参阅Javadoc,其中明确说明了这一切。

只需阅读它直到流结束。

答案 2 :(得分:0)

如果您的最终目标是从Dropbox下载文件,则应使用Dropbox Java APIsimpler solution。否则,对Dropbox文件的URLConnection将下载一个网页(用HTML格式),显示一个用于下载文件的链接(包含许多其他东西!)。