我正在尝试从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
空流。
答案 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 API或simpler solution。否则,对Dropbox文件的URLConnection将下载一个网页(用HTML格式),显示一个用于下载文件的链接(包含许多其他东西!)。