日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java文件斷點續傳實現原理解析

瀏覽:29日期:2022-09-01 14:06:05

一、作用:

隨機流(RandomAccessFile)不屬于IO流,支持對文件的讀取和寫入隨機訪問。

二、隨機訪問文件原理:

首先把隨機訪問的文件對象看作存儲在文件系統中的一個大型 byte 數組,然后通過指向該 byte 數組的光標或索引(即:文件指針 FilePointer)在該數組任意位置讀取或寫入任意數據。

三、相關方法說明:

1、對象聲明:RandomAccessFile raf = newRandomAccessFile(File file, String mode);

其中參數 mode 的值可選 'r':可讀,'w' :可寫,'rw':可讀性;

2、獲取當前文件指針位置:int RandowAccessFile.getFilePointer();

3、改變文件指針位置(相對位置、絕對位置):

1> 絕對位置:RandowAccessFile.seek(int index);

2> 相對位置:RandowAccessFile.skipByte(int step); 相對當前位置

4、給寫入文件預留空間:RandowAccessFile.setLength(long len);

斷點續傳實現原理:

1)下載斷開的時候,記錄文件斷點的位置position;

2)繼續下載的時候,通過RandomAccessFile找到之前的position位置開始下載

實際操作:

我們在D盤的根目錄下創建一個名為”test.txt”的文件,文件內容很簡單,如圖所示:

Java文件斷點續傳實現原理解析

沒錯,我們輸入的內容就是簡單的6個英語字母。然后我們右鍵→屬性:

Java文件斷點續傳實現原理解析

我們要實現的效果很簡單:將在D盤的”test.txt”文件寫入到E盤當中,但中途我們會模擬一次”中斷”行為,然后在重新繼續上傳,最終完成整個過程。

也就是說,我們這里將會把“D盤”視作一臺電腦,并且直接將”E盤”視作一臺服務器。那么這樣我們甚至都不再與http協議扯上半毛錢關系了,(當然實際開發我們肯定是還是得與它扯上關系的 ^<^),從而只關心最基本的文件讀寫的”斷”和”續”的原理是怎么樣的。

import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.RandomAccessFile;public class Test { private static int position = -1; public static void main(String[] args) { // 源文件與目標文件 File sourceFile = new File('D:/', 'test.txt'); File targetFile = new File('E:/', 'test.txt'); // 輸入輸出流 FileInputStream fis = null; FileOutputStream fos = null; // 數據緩沖區 byte[] buf = new byte[1]; try { fis = new FileInputStream(sourceFile); fos = new FileOutputStream(targetFile); // 數據讀寫 while (fis.read(buf) != -1) {fos.write(buf);// 當已經上傳了3字節的文件內容時,模擬網絡中斷了,拋出異常if (targetFile.length() == 3) { position = 3; throw new FileAccessException();} } } catch (FileAccessException e) { keepGoing(sourceFile, targetFile, position); } catch (FileNotFoundException e) { System.out.println('指定文件不存在'); } catch (IOException e) { } finally { try {// 關閉輸入輸出流if (fis != null) fis.close();if (fos != null) fos.close(); } catch (IOException e) {e.printStackTrace(); } } } private static void keepGoing(File source, File target, int position) { try { Thread.sleep(10000); } catch (Exception e) { e.printStackTrace(); } try { RandomAccessFile readFile = new RandomAccessFile(source, 'rw'); RandomAccessFile writeFile = new RandomAccessFile(target, 'rw'); readFile.seek(position); writeFile.seek(position); // 數據緩沖區 byte[] buf = new byte[1]; // 數據讀寫 while (readFile.read(buf) != -1) {writeFile.write(buf); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}class FileAccessException extends Exception {}

總結一下,我們在這次改動當中都做了什么工作:

首先,我們定義了一個變量position,記錄在發生中斷的時候,已完成讀寫的位置。(這是為了方便,實際來說肯定應該講這個值存到文件或者數據庫等進行持久化) 然后在文件讀寫的while循環中,我們去模擬一個中斷行為的發生。這里是當targetFile的文件長度為3個字節則模擬拋出一個我們自定義的異常。(我們可以想象為實際下載中,已經上傳(下載)了”x”個字節的內容,這個時候網絡中斷了,那么我們就在網絡中斷拋出的異常中將”x”記錄下來)。 剩下的就如果我們之前說的一樣,在“續傳”行為開始后,通過RandomAccessFile類來包裝我們的文件,然后通過seek將指針指定到之前發生中斷的位置進行讀寫就搞定了。(實際的文件下載上傳,我們當然需要將保存的中斷值上傳給服務器,這個方式通常為httpConnection.setRequestProperty(“RANGE”,”bytes=x”);)

在我們這段代碼,開啟”續傳“行為,即keepGoing方法中:我們起頭讓線程休眠10秒鐘,這正是為了讓我們運行程序看到效果。 現在我們運行程序,那么文件就會開啟“由D盤上傳到E盤的過程”,我們首先點開E盤,會發現的確多了一個test.txt文件,打開它發現內容如下:

Java文件斷點續傳實現原理解析

沒錯,這個時候我們發現內容只有“abc”。這是在我們預料以內的,因為我們的程序模擬在文件上傳了3個字節的時候發生了中斷。

Ok,我們靜靜的等待10秒鐘過去,然后再點開該文件,看看是否能夠成功:

Java文件斷點續傳實現原理解析

通過截圖我們發現內容的確已經變成了“abc”,由此也就完成了續傳。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲一区二区三区中文字幕在线观看 | 久久精品99国产精品| 天堂√8在线中文| 欧美91在线| 国产欧美一区二区色老头| 精品五月天堂| 久久精品 人人爱| 老鸭窝毛片一区二区三区| 尹人成人综合网| 亚洲福利精品| 欧美日韩中文一区二区| 欧美午夜精彩| 欧美在线精品一区| 欧美在线精品一区| 国产劲爆久久| 日韩avvvv在线播放| 日本成人精品| 日本va欧美va精品发布| 国产乱人伦精品一区| 国产精品99精品一区二区三区∴| 香蕉久久久久久| 免费日韩av片| 丝袜a∨在线一区二区三区不卡| 欧美日韩在线网站| 神马午夜久久| 性欧美长视频| 亚州av日韩av| 国产亚洲精品美女久久| 欧美日韩亚洲一区三区| 国产成人久久精品一区二区三区| 开心激情综合| 欧美精品资源| 99久久夜色精品国产亚洲1000部| 蜜臀av免费一区二区三区| 亚洲成人免费| 日韩精品免费一区二区夜夜嗨| 麻豆精品在线| 国产精一区二区| 国产精品v一区二区三区| 成人国产精品一区二区网站| 午夜av一区| 精品黄色一级片| 亚洲精品国产嫩草在线观看 | 久久蜜桃av| 在线精品国产亚洲| 免费亚洲婷婷| 亚洲精品在线观看91| 国产区精品区| 久久精品亚洲欧美日韩精品中文字幕| 亚洲精品视频一二三区| 精品视频高潮| 一区二区三区四区日韩| 国产精品视频首页| 中文字幕av一区二区三区人| 久久午夜影院| 日韩精品亚洲专区| 国产一区日韩欧美| 都市激情国产精品| 丝袜美腿亚洲色图| 国产在线欧美| 亚洲不卡系列| 97在线精品| 国产人成精品一区二区三| 亚洲天堂日韩在线| 国产精品嫩草99av在线| 99久久精品网站| 色偷偷偷在线视频播放| 国产精品va视频| 日本一区二区中文字幕| 欧美日韩国产探花| 日韩亚洲国产欧美| 日韩国产一区二区三区| 久久精品国产99国产| 蜜桃免费网站一区二区三区| 久久久噜噜噜| 午夜视频精品| 免费精品视频最新在线| 欧美二区视频| 视频一区视频二区中文字幕| 国产一区导航| 模特精品在线| 日韩高清国产一区在线| 日本在线不卡视频一二三区| 免费国产亚洲视频| 亚洲精品伊人| 国产精品一线| 不卡一二三区| 欧美日韩国产一区二区三区不卡| 日韩不卡在线| 国产亚洲欧洲| 奇米亚洲欧美| 鲁鲁在线中文| 亚洲永久字幕| 日韩中文字幕在线一区| 91成人在线精品视频| 国产精品三p一区二区| 国产情侣久久| 日韩成人精品一区| 亚洲特色特黄| 91精品国产自产精品男人的天堂| 亚洲综合电影| 午夜欧美在线| 国产亚洲一区| 最新中文字幕在线播放| 在线综合亚洲| 国产精品qvod| 99久久激情| 视频一区中文字幕国产| 久久99国产精品视频| 亚洲bt欧美bt精品777| 亚洲国产成人二区| 一区二区电影在线观看| 欧美日韩精品免费观看视完整| 日韩精选在线| 麻豆精品视频在线观看免费| 一区二区精品伦理...| 亚洲欧美日本国产专区一区| 国产福利一区二区三区在线播放| 88xx成人免费观看视频库| 中文亚洲欧美| 九九九精品视频| 伊人久久亚洲美女图片| 国产一区2区| 蜜臀av在线播放一区二区三区| 精品免费av在线| 国产精品日本一区二区三区在线| 视频一区中文| 欧美激情麻豆| 日韩黄色av| 不卡在线一区二区| 国产私拍福利精品视频二区| 亚洲国产日韩欧美在线| 国产a久久精品一区二区三区| 日韩国产一区二区| 国产精品色婷婷在线观看| 国产亚洲在线观看| 日韩电影免费网站| 国产精品国码视频| 日韩高清在线观看一区二区| 国产精品呻吟| 日韩在线观看一区| 国产 日韩 欧美 综合 一区| 日韩av一二三| 中文字幕视频精品一区二区三区| 精品中文字幕一区二区三区| 日韩高清在线不卡| 亚洲一区二区三区久久久| av一区二区高清| 国产一区二区色噜噜| 久久久精品区| 国产成人77亚洲精品www| 久久国产精品色av免费看| 国产日韩高清一区二区三区在线| 蜜臀久久99精品久久久久久9| 蜜桃成人精品| 日韩精品久久久久久久电影99爱| 成人日韩在线| 精品视频一区二区三区在线观看 | 午夜在线精品偷拍| 美女久久99| 成人午夜网址| 久久精品国内一区二区三区| 久久影视三级福利片| 精品一区二区三区中文字幕视频| 涩涩涩久久久成人精品| 狠狠操综合网| 中文字幕日韩亚洲| 国产欧美日韩一区二区三区四区| 久久精品国产久精国产| 精品国产美女a久久9999| 精品高清久久| 91精品推荐| 青青国产精品| 久久蜜桃精品| 91福利精品在线观看| 精品亚洲二区| 亚洲少妇诱惑| 日韩av中文字幕一区| 国产在线|日韩| 亚洲欧美久久精品| 久久一区精品| 天堂va蜜桃一区二区三区| 福利视频一区| 综合激情五月婷婷| 欧美视频久久| 精品一区三区| 美女国产一区二区三区| 玖玖玖国产精品| 99久久久国产精品美女| 精品视频高潮| 婷婷成人av| 久久在线电影| 国产一区二区三区天码| 蜜桃av一区二区| 91精品国产成人观看| 精品国产欧美日韩| 国产精品久久亚洲不卡| 免费在线观看不卡| 久久电影tv| 精品一区电影|