Android实现文件的分割和组装
2014-09-03 10:57
495 查看
本文以实例形式讲述了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程序设计有一定的借鉴价值。
您可能感兴趣的文章:
- android利用xml实现分割线
- Android中Split()字符串分割特殊用法案例详解
- 详解Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)
- Android中控件GridView实现设置行列分割线的方法示例
- Android 关于ExpandableListView去掉里头分割线的方法
- Android RecyclerView网格布局(支持多种分割线)详解(2)
- Android取消EditText自动获取焦点默认行为
- Android控件系列之EditText使用方法
- Android中EditText实现不可编辑解决办法
- Android EditText实现分割输入内容
相关文章推荐
- Android文件的分割和组装
- Android 动态添加线性布局(.java文件内) 实现控件按比例分割空间
- Android文件的分割和组装
- Android应用实现文件关联
- 文件分割存储用例的实现一
- Android上利用SDK的BluetoothAPI实现传送文件
- 在Windows系统中,如何python脚本实现分割合并大二进制文件,方便上传
- Android代码实现APK文件的安装与卸载
- 二进制双通道技术实现文件分割(一)
- android 自定义ListView 实现 弹出自定义对话框(带EditText)实现 配置文件实现
- Android下的应用编程——用HTTP协议实现文件上传功能
- 文件分割与合并代码实现
- Android 实现文件的上传
- 用Java实现文件分割/合并操作
- android中通过代码实现文件权限修改(chmod)
- JAVA 实现文件分割与合并
- 项目迭代开发手记--文件分割存储用例的实现过程(3)
- 用Java实现文件分割/合并操作
- android中通过代码实现文件权限修改(chmod)
- Android实现文件下载断点续传