日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

ftp 断点续传 Android,Android使用FTP实现断点续传

發布時間:2023/12/4 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ftp 断点续传 Android,Android使用FTP实现断点续传 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android使用FTP實現斷點續傳

斷點續傳指的是在下載或上傳時,將下載或上傳任務(一個文件或一個壓縮包)人為的劃分為幾個部分,每一個部分采用一個線程進行上傳或下載,如果碰到網絡故障,可以從已經上傳或下載的部分開始繼續上傳下載未完成的部分,而沒有必要從頭開始上傳下載。用戶可以節省時間,提高速度。

我們都知道Android下使用HTTP實現斷點續傳很容易。因為我們在發送下載請求給服務器后,服務器會將該文件的信息返回給我們。同時我們也可以設置發送文件的起始位置,讓服務器從該位置開始傳輸文件。

簡單介紹一下FTP(File Transfer Protocol)文件傳輸協議。用于Internet上的控制文件的雙向傳輸。在FTP的使用當中,用戶經常遇到兩個概念:”下載”(Download)和”上傳”(Upload)。用Internet語言來說,用戶可通過客戶機程序向(從)遠程主機上傳(下載)文件。

FTP沒有所謂的頭文件,剛接觸到還是有點霧水的,不知從何下手。但是查詢一下資料后,覺得還是挺簡單的,只需要一個指令。多說無益,給大家舉個栗子- -、

private Runnable mRunnable = new Runnable() {

@Override

public void run() {

try {

try {

ftpClient.connect(ftpHost, ftpPort);// 連接FTP服務器

ftpClient.setControlEncoding("iso-8859-1");

} catch (Exception e) {

mHandler.sendEmptyMessage(DOWNLOAD_FAILED);

return;

}

if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode()))

return;

if (ftpClient.login(ftpUser, ftpPwd)) {

// 設置被動模式

ftpClient.enterLocalPassiveMode();

// 設置以二進制方式傳輸

ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

// 檢查遠程文件是否存在

FTPFile[] files = ftpClient.listFiles(new String(

ftpFileName.getBytes("GBK"), "iso-8859-1"));

int per = (int) (files[0].getSize() / 100);

FileOutputStream output = null;

InputStream input = null;

long localSize = 0L;

if (files.length == 0) {// 文件不存在,下載失敗

mHandler.sendEmptyMessage(DOWNLOAD_FAILED);

return;

} else {// 開始下載

File file = new File(strLocalFile);

if (file.exists()) {// 存在,開始續傳

localSize = file.length();

if (localSize > files[0].getSize()) {// 下載完成

mHandler.sendEmptyMessage(DOWNLOAD_SUCCESS);

return;

}

// 從本地文件上續傳

output = new FileOutputStream(file, true);

// 將文件指向已下載的位置

ftpClient.setRestartOffset(localSize);

input = ftpClient.retrieveFileStream(new String(

ftpFileName.getBytes("GBK"), "iso-8859-1"));

progress = (int) (localSize / per);

mHandler.sendEmptyMessage(DOWNLOAD_UPDATE);

} else {// 直接下載

output = new FileOutputStream(file);

input = ftpClient.retrieveFileStream(new String(

ftpFileName.getBytes("GBK"), "iso-8859-1"));

mHandler.sendEmptyMessage(DOWNLOAD_START);

}

if (output == null || input == null) {

mHandler.sendEmptyMessage(DOWNLOAD_FAILED);

return;

}

byte[] bytes = new byte[1024];

int c;

while ((c = input.read(bytes)) != -1) {

if (isBreak) {

Log.i("xxx", "已停止下載!");

mHandler.sendEmptyMessage(DOWNLOAD_STOP);

break;

}

output.write(bytes, 0, c);

localSize += c;

long nowProcess = localSize / per;

if (nowProcess > progress) {

progress = nowProcess;

if (progress % 1 == 0) {

Log.i("xxx", "下載進度:" + progress);

}

mHandler.sendEmptyMessage(DOWNLOAD_UPDATE);

}

}

input.close();

output.close();

if (c <= 0) {// 下載完成

mHandler.sendEmptyMessage(DOWNLOAD_SUCCESS);

} else {

mHandler.sendEmptyMessage(DOWNLOAD_STOP);

}

}

}

} catch (Exception e) {

try {

ftpClient.disconnect();

} catch (IOException e1) {

e1.printStackTrace();

}

e.printStackTrace();

}

}

};

下面說一下使用FTP具體流程以及注意事項。

1. FTP的連接以及下載操作必須放在子線程中

2. ftpClient.setControlEncoding(“iso-8859-1”)設置字符編碼,防止出現中文亂碼現象

3. 獲取本地已下載文件大小,然后使用ftpClient.setRestartOffset(localSize),可以開始斷點續傳了

FTP實現斷點續傳就這么簡單完成了,逃。

ps:我使用jar包是Apache的commons-net。實現FTP斷點續傳,服務端的FTP也得支持斷點續傳的指令。 pps:功力有限,若有什么錯誤,請不吝賜教,謝謝

總結

以上是生活随笔為你收集整理的ftp 断点续传 Android,Android使用FTP实现断点续传的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。