android分割字符串数组中,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
// 判断数据包是否已经齐全
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
// 把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分割字符串数组中,Android实现文件的分割和组装相关推荐
- linux+多个字符分割字符串数组中,String的split()方法可以将字符串按照特定的分隔符拆分成字符串数组...
在java.lang包中有String.split()方法,返回是一个数组------不管按照什么拆,拆出来是一个数组 String str = "1,2,3,4,5,6"; St ...
- android动态添加数组中,Android动态数组
我正在通过Android Pull Parser技术解析XML文件.首先,看看下面的XML文件: hello xyz abc def 考虑一下我正在解析上面的文件.现在,我的问题是我想为名称和地址创建 ...
- linux中如何分割字符串数组中,关于bash:linux shell脚本:拆分字符串,将它们放入一个数组中,然后循环遍历它们...
本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: Split string based on delimiter in Bash? 在bash脚本中,如何使用像;这样的分 ...
- linux中如何分割字符串数组中,[转+整理]linux shell 将字符串分割成数组
"传成老树白茶"献礼母亲节 邀市民品茗感受茶文化 5月8日下午,传成老树白茶巡回中国公益品鉴会第七十站,走进福州马尾区东方名城传成老树白茶文化馆. 本次品鉴会活动以 ...
- 用js:字符串数组中每一项的长度。将字符串数组用 | 符号分割。有序数组插入排序插入数组。猴子选大王
1.字符串数组中每一项的长度 代码: <script> var arr = ['hello', 'world!', 'nice', 'to', 'meet', 'you'];var new ...
- 求行指针所指的字符串数组中长度最长的字符串所在的行下标
<程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p137 习题5 3.行指针ss所指字符串数组中共有M个字符串,且字符串长度<N.求ss所指字符串 ...
- 使用C#删除一个字符串数组中的空字符串
C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...
- 20190501-编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串...
题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow ...
- 从字符串数组中寻找数字的元素
前几天Insus.NET有写过一篇<从字符串数组中把数字的元素找出来>http://www.cnblogs.com/insus/p/8001026.html 和它的延伸篇<C# yi ...
最新文章
- Win7+Ubuntu双系统,如何卸载Ubuntu系统?
- Java泛型应用详解
- Wordpress基础:精简头部wp_head
- 【Nginx那些事】nginx 安装及常用指令
- asp.net core-5.控制台读取json文件
- 【Flink】Flink 消费 kafka报错 写入 es 死信队列 FetchSessionHandler DisconnectException
- vim-Complex repeats
- 分布式多副本一致性协议:paxos
- 机器学习(3)——K-近邻算法改进约会网站的配对效果实例
- Leetcode 刷题笔记(二十四) ——动态规划篇之背包问题:01背包
- L3MON-远程Android管理套件环境搭建
- java实现一码多扫支付_详解JAVA后端实现统一扫码支付:微信篇
- 2022年湖南省中医执业医师考试第三单元医学针灸学模拟题
- XP系统的的一些快捷方式
- Linux - 虚拟网络设备 - bridge,veth,namespace
- 山东大学网络靶场实验平台—团队进度(三)
- 理查德30多岁开发出C语言,《C语言程序设计》多媒体教学课件开发与应用
- 来自一位双非本科跌跌撞撞的秋招指南(秋招攻略/经验分享/干货)
- 帝国cms模板如何开启支持php,帝国cms模板使用说明与技巧
- 3.9 Docker最新入门教程-Docker入门-构建镜像最佳实践