文件归档与解档问题
来源:互联网 发布:ubuntu安装声卡驱动 编辑:程序博客网 时间:2024/05/16 11:24
在大数据开发中,或这一些项目中,经常遇到很多小文件的处理,为了减小namenode内存的占用,提高效率,经常将小文件压缩并归档处理,而在流的读取与写的操作的时候,归档后还需要解档,下面写一个工具类,实现文件的归档与解档:
1.字节数组与整数转化的工具类
package java.util;/** * 数据工具类 */public class DataUtil {/** * 将整数转换成字节数组 */public static byte[] int2ByteArr(int i){byte[] bytes = new byte[4] ;bytes[0] = (byte)(i >> 24) ;bytes[1] = (byte)(i >> 16) ;bytes[2] = (byte)(i >> 8) ;bytes[3] = (byte)(i >> 0) ;return bytes ;}/** * 将字节数组转换成整数 */public static int byteArr2Int(byte[] arr){return (arr[0] & 0xff) << 24| (arr[1] & 0xff) << 16| (arr[2] & 0xff) << 8| (arr[3] & 0xff) << 0 ;}}
2.实现文件归档与解档
package java.io;import java.util.DataUtil;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;/** * 归档器 */public class Archiver {/** * 将file文件追加到xar中 */public void appendFile(String xar , String file){try {//归档文件输出流FileOutputStream fos = new FileOutputStream(xar,true) ;//1.文件名程度File f = new File(file);String fileName = f.getName();byte[] fileNameBytes = fileName.getBytes();byte[] fileNameLenBytes = DataUtil.int2ByteArr(fileNameBytes.length);fos.write(fileNameLenBytes);//2.文件名内容fos.write(fileNameBytes);//3.文件长度int len = (int)f.length();byte[] lenBytes = DataUtil.int2ByteArr(len) ;fos.write(lenBytes);//4.文件内容FileInputStream fis = new FileInputStream(f) ;byte[] buf = new byte[1024] ;int len0 = 0 ;while((len0 = fis.read(buf)) != -1){fos.write(buf,0,len0);}fis.close();fos.close();} catch (Exception e) {e.printStackTrace();}}/** * 解档 */public void unarchive(String xar , String dir){try {FileInputStream fis = new FileInputStream(xar) ;while(true){byte[] byte4 = new byte[4] ;int len = fis.read(byte4) ;//读到文件尾if(len == -1){break ;}//byte[] fileNameBytes = new byte[DataUtil.byteArr2Int(byte4)];//读取文件名fis.read(fileNameBytes);String fileName = new String(fileNameBytes) ;File newFile = new File(dir,fileName) ;FileOutputStream fos = new FileOutputStream(newFile) ;//读取文件长度fis.read(byte4);byte[] fileContBytes = new byte[DataUtil.byteArr2Int(byte4)] ;//读取文件内容fis.read(fileContBytes) ;fos.write(fileContBytes);fos.close();}fis.close();} catch (Exception e) {e.printStackTrace();}}}
3.测试
package java.test;import java.io.Archiver;import org.junit.Test;/** * 测试归档,解档 */public class TestArchiver {/** * 测试归档 */@Testpublic void TestArchive(){Archiver a = new Archiver();a.appendFile("d:/arch/my.xar","d:/arch/1.txt");a.appendFile("d:/arch/my.xar","d:/arch/2.gif");a.appendFile("d:/arch/my.xar","d:/arch/3.mp3");}/** * 测试归档 */@Testpublic void TestUnarchive(){Archiver a = new Archiver();a.unarchive("d:/arch/my.xar","d:/arch/unarch");}}
阅读全文
1 0
- 文件归档与解档问题
- 归档解档(文件写入与读取)
- 解档与归档
- 归档与解档
- 归档与解归档
- 归档与解归档
- 归档与解归档
- 归档与解归档
- OC—文件I/O 归档与解档
- 文件管理与归档
- IOS_归档与解档
- XMG 解档与归档
- Linux system 文件的归档与解档、传输与下载及压缩与解压
- RHEL7文件归档与压缩
- 文件的归档与压缩
- 归档解档自定义类奔溃的问题
- iOS的归档与解档
- OC学习--归档与解档
- 环境配置,myeclipse+oracle+vmvare12+CentOS7+...
- JS面向对象
- 用Apache Spark进行大数据处理之Spark流(3)
- [US Giants] 五. Greedy
- Python中布尔类型
- 文件归档与解档问题
- Androidstudio视频教程
- concurrent包之reentrantlock
- 用Apache Spark进行大数据处理之Machine Learning(4)
- Linux之Centos7.x安装和使用
- SpringBoot:静态资源处理配置
- RateLimiter源码阅读
- 【pmp考试之风险管理】风险管理需要背诵的语句
- 用Apache Spark做大数据处理之Spark机器学习(5)