gpt4 book ai didi

java - 来自 HttpURLConnection 的对象的 InputStream 未获取所有数据

转载 作者:行者123 更新时间:2023-12-01 10:12:16 24 4
gpt4 key购买 nike

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

例如:

假设我要下载对象:http://stuorgs.uga.edu/images/spotlight/spotlight_button.png仅 1 部分。所以我的范围是从 bytes=0-max 。我的程序创建了一个大小为 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 提前关闭了吗?如果是这样,我该如何防止这种情况发生?否则,有什么问题?

最佳答案

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

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

注意不要在类之后命名变量,也不要以大写字母开头。这是为了类(class)。

关于java - 来自 HttpURLConnection 的对象的 InputStream 未获取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36075345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com