a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統 > Android > 正文

Android實現文件的分割和組裝

2020-04-11 11:44:24
字體:
來源:轉載
供稿:網友

本文以實例形式講述了Android實現文件的分割和組裝的方法,主要是針對UDP數據包進行的分割和組裝。分享給大家供大家參考之用。具體方法如下:

一般來說,在使用UDP數據包發送文件時,由于UDP數據包大小的限制,一個文件要放在幾個UDP數據包里面發送,這就需要把一個文件分割成若干部分,分別放進若干個UDP數據包里面,在接收端,收到這些UDP數據包以后,再對文件進行組裝,從而得到一個完整的文件。步驟如下:

一、定義的相關變量:

// 要分割的文件public static RandomAccessFile raf_split;// 要合并的文件public static RandomAccessFile raf_merge;// 文件長度public static long len;// Byte數組public static int offset;public static int os = 5;public static int size = 1024-os;public static byte file_data[] = new byte[1024];

二、FileOperClass類實現文件的分割和組裝操作:

// 構造函數(0-分割文件,1-合并文件)public FileOperClass(String file, int x){     // 分割文件  if (x == 0){        try{      // RandomAccessFile以只讀方式打開文件      raf_split = new RandomAccessFile(file,"r");      // 獲得文件大小      len = raf_split.length();      // 需要幾個數據包      pnum = (int) Math.ceil((raf_split.length()*1.0)/(size * 1.0)) + 1;      // 最后一個數據包里面數據多少      pmod = (int) (raf_split.length() - (pnum -2)* size);      // 分割文件      split();    }    catch (Exception e){       }  }  // 合并文件  else if (x == 1){    try{      // RandomAccessFile以讀寫方式打開文件      raf_merge = new RandomAccessFile(file,"rw");      // 合并文件      merge();    }    catch (Exception e){     }  }}

三、分割文件:

// 分割文件并發送public static void split(){     int m1,m2;     p_id = 0;  offset = 0;     try{    while (len>0){      // 數據包類型      file_data[0] = (byte) 2;      // 客戶端ID      file_data[1] = (byte) MainActivity.cli_id;      // 會話ID      file_data[2] = (byte) MainActivity.ses_id;      // 該會話數據包數量      file_data[3] = (byte) pnum;      // 數據包ID      file_data[4] = (byte) p_id;      // seek      raf_split.seek(offset);      // 讀出數據到file_data      raf_split.read(file_data, os, size);      // 發送數據包      MainActivity.trd_send.set_action(2, file_data);      len = len - size;       p_id = p_id + 1;      offset = offset + size;     }    // 記錄最后一個數據包剩余字節的數據包    // 數據包類型    file_data[0] = (byte) 2;    // 客戶端ID    file_data[1] = (byte) MainActivity.cli_id;    // 會話ID    file_data[2] = (byte) MainActivity.ses_id;    // 該會話數據包數量    file_data[3] = (byte) pnum;    // 數據包ID    file_data[4] = (byte) p_id;    m1 = pmod / 128;    m2 = pmod % 128;    file_data[5] = (byte) m1;    file_data[6] = (byte) m2;    // 發送數據包    MainActivity.trd_send.set_action(2, file_data);       }  catch (Exception e){   }  finally{    // 關閉文件    try{      raf_split.close();    }    catch(Exception err){     }   }}

四、合并文件:

// 合并文件public static void merge(){     byte[][] tmp_byte = new byte[MainActivity.mer_pkt_num][1024];  int i,j;     try{    for(i=0; i<MainActivity.r_datapacket.size(); i++){              // 判斷數據包是否已經齊全      if ((MainActivity.r_datapacket.get(i).c_id == MainActivity.mer_cli_id) && (MainActivity.r_datapacket.get(i).ses_id == MainActivity.mer_ses_id))      {        // 讀出數據包的數據進byte數組        tmp_byte[MainActivity.r_datapacket.get(i).p_id] = MainActivity.r_datapacket.get(i).b;      }            }    for (i=0; i<MainActivity.mer_pkt_num-2; i++){      // 把byte數組寫進文件      raf_merge.write(tmp_byte[i], os, size);    }    // 最后一個byte數組寫進文件    raf_merge.write(tmp_byte[MainActivity.mer_pkt_num-1], os, MainActivity.mer_pkt_mod );  }  catch(Exception e){   }  finally{    // 關閉文件    try{      raf_merge.close();    }    catch(Exception err){    }   }}

相信本文所述對大家的Android程序設計有一定的借鑒價值。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91精品久久久久久久久久久久久久久 | 精品1区 | 成人99| 欧美日韩国产一区二区 | 国产精品久久久久久久毛片 | 欧美日韩黄| 欧美日韩国产成人 | 国产婷婷精品av在线 | 午夜视频你懂得 | 国产偷国产偷精品高清尤物 | 日韩精品在线播放 | 五月综合久久 | 91在线最新| y111111国产精品久久婷婷 | 精品91 | 久久网日本 | 91.成人天堂一区 | 一级欧美 | 91精品国产欧美一区二区 | 国产精品精品 | 久久视频在线 | 91免费版在线观看 | 久久久久综合网 | 日韩电影一区 | 亚洲欧美韩国 | 国产精品视频专区 | av在线大全 | 久久久精品电影 | 国产特黄大片aaaaa毛片 | 国产不卡视频在线观看 | 四影虎影ww4hu55.com | 日本亚洲精品一区二区三区 | 久久草草影视免费网 | 中文字幕国产视频 | 免费av在线网站 | 久久久精品免费观看 | 欧美一级片在线观看 | 欧美国产一区二区 | 91精品国产综合久久久久久 | 91电影院 | 免费精品视频在线观看 |