所以我有一个HttpURLConnection连接到某些URL上的某些图像。我正在使用Range属性下载此图像(在单独的并行连接中下载一个文件)。抓住所有零件后,我将它们拼接在一起。除非我尝试用更大的文件做一个InputStream(这意味着我可以在200个并行连接中获得文件,但不是5个),一切都很有效。
例如:
假设我想只下载1个部分中的对象:http://stuorgs.uga.edu/images/spotlight/spotlight_button.png。所以我的范围是从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是否提前结束?如果是这样,我该如何防止这种情况发生?否则,出了什么问题?
答案 0 :(得分:1)
Javadoc中没有任何地方声明import React, {Component, PropTypes} from 'react';
import ReactDOM from 'react-dom';
function getFormInputs() {
const {queryParams} = this.props;
if (queryParams === undefined) {
return null;
}
return Object.keys(queryParams).map((name, index) => {
return (
<input
key={index}
name={name}
type="hidden"
value={queryParams[name]}
/>
);
});
}
export default class FileDownload extends Component {
static propTypes = {
actionPath: PropTypes.string.isRequired,
method: PropTypes.string,
onDownloadComplete: PropTypes.func.isRequired,
queryParams: PropTypes.object
};
static defaultProps = {
method: 'GET'
};
componentDidMount() {
ReactDOM.findDOMNode(this).submit();
this.props.onDownloadComplete();
}
render() {
const {actionPath, method} = this.props;
return (
<form
action={actionPath}
className="hidden"
method={method}
>
{getFormInputs.call(this)}
</form>
);
}
}
填充缓冲区。
它会阻塞,直到至少有一个字节的数据可用,然后传输任何可用的数据,并返回传输的字节数。
你必须循环。或者使用InputStreamread(byte[])
。
注意:不要在课后为变量命名,也不要用大写字母开头。对于课程而言。