文件的拆分与合并在开发中经常会用到,上传或是下载的时候都有这样的运用
文件拆分的思路
将文件大小拆分为n个文件
那么,每个文件的大小就是等大小的
如果文件大小被n除不尽,那么就使用n+1个文件来拆分
最后一个文件的大小就是整除不尽的那一部分数据
文件合并的思路
将拆分出来的全部文件胺顺序读取
挨个数据写入到指定文件中
所有文件数据写入完毕
那么合并就完成了
代码实现
布局文件(activity_main.xml
)
1 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
主活动文件(MainActivity.java
)
1 | import java.io.File; |
工具类文件(Utils.java
)
1 | public class Utils { |
JNI头文件(com_cj5785_ndkfilepatch_Utils.h
)
1 | /* DO NOT EDIT THIS FILE - it is machine generated */ |
JNI头文件实现(NdkFilePatch.c
)
1 |
|
Android.mk
文件
因为在C实现代码中使用了日志打印,所以要在Android.mk
文件中,添加日志打印的依赖1
2
3
4
5
6
7
8
9LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NdkFilePatch
LOCAL_SRC_FILES := NdkFilePatch.c
LOCAL_LDLIBS := -lm -llog
include $(BUILD_SHARED_LIBRARY)
问题总结
- 在最开始的时候,日志无法打印,报错
ANDROID_LOG_INFO
不存在,添加本地支持以后仍然不行,无论怎么折腾,依旧如此。无奈之下,重启eclipse,居然好了。后经查阅得知,这是NDK r9d存在的bug,按照stackoverflow
一位回答者的建议,先clean项目,然后build就好了:Cleaning the project and Project -> Build Project (I have Build Automatically disabled) recreated the .so library and all the symbols are now properly found
- 在拆分实现的时候,无论何种情况,得到的第最后一个拆分文件大小都为零,这里是因为在拆分的时候,大小的计算是基于字节大小的,故最后一个文件存储的大小是除数的字节数大小以下的一个值,很小。。。