- From: Dave Wain <dave.wain@ntlworld.com>
- Date: Tue, 22 Dec 2015 10:10:59 -0000
- To: <ietf-http-wg@w3.org>
A typical Java get with a range request looks like this:
/**
* Retrieves the part of the file required via HTTP.
*/
private byte[] getHttpBytes(HeaderAndData hnd, long index, int
nbytes)
{
// Allocate a new buffer
final byte[] bytes = new byte[nbytes];
try {
// Create a header to read the correct data
final URLConnection uc = hnd.data.openConnection();
final long last = index + nbytes - 1;
uc.setRequestProperty("Range","bytes="+index+"-"+last);
uc.setRequestProperty("Accept-Encoding","gzip,
deflate");
uc.setUseCaches(false); //BUG applets
// Do the request
final InputStream raw = uc.getInputStream();
final String encoding =
uc.getHeaderField("Content-Encoding");
final InputStream in;
if ("gzip".equals(encoding)) {
in = new GZIPInputStream(raw);
} else if ("deflate".equals(encoding)) {
in = new InflaterInputStream(raw);
} else {
in = raw;
}
// Read the required data
int nread = 0;
for (int result; nread<nbytes; nread+=result) {
result = in.read(bytes, nread,
nbytes-nread);
if (result < 0) break;
}
// Check for incomplete reads
if (nread < nbytes) {
DEMViewer.log("Incomplete,nbytes="+nbytes+",nread="+nread);
}
// Clear and close (implies Stay-Alive)
while (raw.available() > 0) raw.read();
raw.close();
}
catch(IOException ex) {
DEMViewer.log(ex+",index="+index+",nbytes"+nbytes);
}
return bytes;
}
Hope this helps :)
DW
Note: This message is private and confidential and hence
must be received without interception or distortion by the
intended recipients only. Permission to use the information
explicitly must come from the sender (and recipients).
My personal web site and alternate contact details are at:
http://homepage.ntlworld.com/dave.wain/.
Received on Tuesday, 22 December 2015 10:11:40 UTC