diff options
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/com/tightvnc/rfbplayer/FbsConnection.java | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/java/src/com/tightvnc/rfbplayer/FbsConnection.java b/java/src/com/tightvnc/rfbplayer/FbsConnection.java index 20b01544..d952f4fe 100644 --- a/java/src/com/tightvnc/rfbplayer/FbsConnection.java +++ b/java/src/com/tightvnc/rfbplayer/FbsConnection.java @@ -199,20 +199,15 @@ public class FbsConnection { } // Prepare URLConnection to the right part of the .fbk file. - URLConnection fbkConn = fbkURL.openConnection(); - long firstByteOffset = entryPoint.key_fpos; - long lastByteOffset = entryPoint.key_fpos + entryPoint.key_size - 1; - String rangeSpec = "bytes=" + firstByteOffset + "-" + lastByteOffset; - System.err.println("Range: " + rangeSpec); - fbkConn.setRequestProperty("Range", rangeSpec); - fbkConn.connect(); - DataInputStream is = new DataInputStream(fbkConn.getInputStream()); + InputStream is = + openByteRange(fbkURL, entryPoint.key_fpos, entryPoint.key_size); + DataInputStream dis = new DataInputStream(is); // Load keyframe data from the .fbk file. - int keyDataSize = is.readInt(); + int keyDataSize = dis.readInt(); byte[] keyData = new byte[keyDataSize]; - is.readFully(keyData); - is.close(); + dis.readFully(keyData); + dis.close(); // Open the FBS stream. URLConnection fbsConn = fbsURL.openConnection(); @@ -221,4 +216,15 @@ public class FbsConnection { keyData, entryPoint.fbs_skip); } + private InputStream openByteRange(URL url, long offset, long length) + throws IOException { + URLConnection conn = url.openConnection(); + long lastByteOffset = offset + length - 1; + String rangeSpec = "bytes=" + offset + "-" + lastByteOffset; + System.err.println("Range: " + rangeSpec); + conn.setRequestProperty("Range", rangeSpec); + conn.connect(); + return conn.getInputStream(); + } + } |