Android实现文件的分割和组装

本文以实例形式讲述了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程序设计有一定的借鉴价值。

时间: 2024-11-05 16:26:03

Android实现文件的分割和组装的相关文章

Android读写文件的N种写法

Android 读写文件的N种写法(待续...) 读取raw文件 // 读取raw文件 private void rawRead(){ String ret = ""; try { InputStream is = getResources().openRawResource(R.raw.my_raw); int len = is.available(); byte []buffer = new byte[len]; is.read(buffer); ret = EncodingUti

java-创建Android外部存储器文件问题

问题描述 创建Android外部存储器文件问题 我想创建一个.txt文件并将其存储在Android手机的外部存储器.我增加了Android Manifest权限.我运行代码时不给出任何错误提示,但文件却创建不了.我不知道代码哪里出错,请高人指点,谢谢. public void createExternalStoragePrivateFile(String data) { // Create a path where we will place our private file on extern

分辨率-关于android图片资源文件的问题

问题描述 关于android图片资源文件的问题 我可不可以只用一种分辨率的图片,分别存放在不同分辨率的drawable文件中, 然后通过一种缩放方法让它适应不同的分辨率的手机或平板.如果可以的话,这种方法如何实现,请大神指教,不胜感激. 解决方案 一般情况下都可以,一张图片可以放到任意一个目录下,然后你可以设置imageview的大小来适应屏幕,为了不走样,可以在高分辨率下设计图片尺寸,比如在1920屏下设计的图片尺寸为300像素,那么你就设置imageview或其容器为100dp 解决方案二:

数据存储-Android 的文件存储在真机上怎么查看

问题描述 Android 的文件存储在真机上怎么查看 Android 中的写的数据存储到文件中,只能在模拟器中查看是否将数据写到了文件中?真机上怎么查看啊? 解决方案 你用ES文件浏览器查看 解决方案二: 既然是存储到文件中代码写的时候一定有对应的路径啊去相应路径下看看不就知道了 解决方案三: mnt/sdcard这个路径去查看. 解决方案四: 导出android真机上的db文件 解决方案五: 这是在Linux环境下的操作吗?只有这一种方法吗?

《Android 网络开发与应用实战详解》——2.1节简析Android安装文件

2.1 简析Android安装文件 Android 网络开发与应用实战详解 当我们下载并安装Android后,会在其安装目录中看到一些安装文件.这些文件具体是干什么用的,了解这些对学习后面的开发知识十分有用.所以在本节的内容中将简要介绍这些安装文件的基本知识. 2.1.1 Android SDK目录结构 安装Android SDK后,其安装目录的具体结构如图2-1所示. temp:里面包含了一些常用的文件模板. tools:包含了一些通用的工具文件. usb_driver:包含了AMD64和X8

《Android多媒体应用开发实战详解:图像、音频、视频、2D和3D》——2.1节简析Android安装文件

2.1 简析Android安装文件 Android多媒体应用开发实战详解:图像.音频.视频.2D和3D 当下载并安装Android后,会在其安装目录中看到一些安装文件.了解这些文件具体是干什么用的,对于我们后面的驱动开发知识学习十分有用,所以在本节的内容中将简要介绍这些安装文件的基本知识. 2.1.1 Android SDK目录结构 安装Android SDK后,其安装目录的具体结构如图2-1所示. temp:里面包含了一些常用的文件模板. tools:包含了一些通用的工具文件. usb_dri

android工程文件的res文件下的xml文件中color标签的值如何动态修改

问题描述 android工程文件的res文件下的xml文件中color标签的值如何动态修改 请问给位前辈,如果想动态修改android的strings.xml文件中的color属性java代码该怎莫写呀!?请大家指点一下!是修改传入新值,不是获取. 解决方案 在values下面新建一个叫做color.xml的文件内容如下颜色都是16进制的,你可以通过颜色表来查询. <?xml version="1.0" encoding="utf-8" ?> #FFFF

本地加密-android本地文件加密该如何设计

问题描述 android本地文件加密该如何设计 最近遇到一个把本地文件加密的问题,不知道该如何解决.求各位大神给思路... 用对称加密,首先可破解不说,他解密后生成的临时文件也会被人看到,不安全. 也想过在文件头写点自己知道的东西,最后自己读的时候去掉,或者非对称加密,但是都要生成解密后真正可读的临时文件,临时文件就是个不安全的隐患,想过直接去读解密后放在内存里的字节数组,但是因为加密文件可能要给第三方应用读取,所以还是得生成个解密后真正可读的临时文件,这个临时文件该怎么放才会更安全?求大神们给

关于Android锁定文件,添加密码锁的实现,请教各路大神

问题描述 关于Android锁定文件,添加密码锁的实现,请教各路大神 想实现Android的文件锁定或者文件夹的锁定,给文件添加一个密码锁,答对密码才能打开文件,请教各路大神怎么实现的呢? 解决方案 http://download.csdn.net/detail/ziyinghui123/6377129 解决方案二: 开启一个服务在后台跑 Taskinfo中获取到当前TopActivity的包名 和你记录到的包名进行比对 相同就弹出密码界面