`
jiuyuehe
  • 浏览: 185775 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java 根据特定数据结构 打自定义包

阅读更多
  组长分配了一个任务,按照特定的数据结果打一个 xxx.pkg的包,然后解压出来后不变~
刚刚开始觉得蛮难的,感觉无从下手,认真分析了20分钟,有思路了!
  首先看特定的数据格式
  
	public static void message(){
//		String  package_header_signature = "hello";

//		int  file_num=8;
//		
//		for(int i=0;i<8;i++){
//			int file_path_length="";
                        int file_size ="";
//			String file_path="";
			
//		}
//	只列了简单几个,原因都懂的!	

//		}
   

大概就是这样子,其实信息再多思路一样也没问题!下面是打包的方法!!
思路是将所有的信息全部转化为二进制存储!

public static void test(String src,String target) throws Exception{
		File file =new File(src);
		//String target = "g://test.pkg";
		File targetFile = new File(target);
		if(!targetFile.exists()){
			targetFile.createNewFile();
		}
		OutputStream os = new FileOutputStream(targetFile);
		
		//write some message
		String  package_header_signature = "hello";
		
		addByte(package_header_signature.getBytes(), os, 4);
		//文件个数
		int filesum=0;
		//文件路径
		List<String> strList = new ArrayList<String>();
		filesum =listFlieSum(file,strList);
		
		//加入文件个数
		addByte(intToByte(filesum,1),os, 1);
		
		for(int i=0;i<strList.size();i++){
			File fileInfo = new File(strList.get(i));
			String file_path = fileInfo.getAbsolutePath();
			int file_path_length = file_path.length();
			int file_size = getFileSize(fileInfo);
			//加入文件路径长度
			addByte(intToByte(file_path_length,1), os, 1);//文件路径的长度
			//加入文件大小
			addByte(intToByte(file_size,4), os, 4);//文件大小
			//加入文件路径
			addByte(file_path.getBytes(), os, file_path.length());//文件路径
		}
		listFile(file,os);
		
		String crc32 = getFileCRCCode(targetFile);
		byte[] crcbyte = crc32.getBytes();
		
		os.close();
		
		
	}


经常碰到的问题就是:bit byte byte[] int 之间的转化!
这里谢谢javaeye的一个网友。

/**
	 * int to byte[] 支持 1或者 4 个字节
	 * @param i
	 * @param len
	 * @return
	 */
	 public static byte[] intToByte(int i,int len) {
	        byte[] abyte=null;
	        if(len==1){
	        	abyte = new byte[len];
	        	abyte[0] = (byte) (0xff & i);
	        }else{
	        	abyte = new byte[len];
	        	abyte[0] = (byte) (0xff & i);
	        	abyte[1] = (byte) ((0xff00 & i) >> 8);
		        abyte[2] = (byte) ((0xff0000 & i) >> 16);
		        abyte[3] = (byte) ((0xff000000 & i) >> 24);
	        }
	        return abyte;
	    }
	   public  static int bytesToInt(byte[] bytes) {
		   int addr=0;
		   if(bytes.length==1){
	        addr = bytes[0] & 0xFF;
		   }else{
			   addr = bytes[0] & 0xFF;
			   addr |= ((bytes[1] << 8) & 0xFF00);
			   addr |= ((bytes[2] << 16) & 0xFF0000);
			   addr |= ((bytes[3] << 24) & 0xFF000000);
		   }
		   return addr;
	    }


/**
	 * 读取byte []
	 * @param b
	 * @param target
	 * @throws Exception
	 */
	public static void addByte(byte[] b,OutputStream os, int len) throws Exception{
		//	File targetpkg  = new File(target);
			byte[] by = new byte[len];
			if (b.length > len) {
				os.write(b, 0, len);
			} else {
				int l = len - (b.length-1);
				
				while (--l > 0) {
					os.write(0);
				}
				os.write(b, 0, b.length);
			}
		}


ok! 打包基本基本没问题了,解包才是关键。请看下一篇!
1
0
分享到:
评论

相关推荐

    java采集网站数据,可以自定义修改采集

    通过修改正则表达式,用户可以定制化地抽取网页中的特定数据,如文章标题、作者、评论内容等。同时,"软件自带了雅虎知识堂,8848look"可能意味着该项目已经预设了一些特定网站的数据采集模板,用户可以直接应用或...

    springboot工程自定义response注解、自定义规范化返回数据结构

    在Spring Boot中,可以创建一个自定义注解,例如`@CustomResponse`,用于标记控制器方法,指示该方法应返回特定的数据结构。这个注解通常会包含一些元信息,如状态码、消息等,以便在处理过程中填充到返回结果中。...

    Java根据word 模板,生成自定义内容的word 文件

    通过上述方法,我们能够使用Java根据Word模板生成自定义内容的Word文件。这种方案适用于那些需要大批量生成个性化Word文档的场景,如报告自动化、邮件合并等。结合Apache POI和Freemarker,Java开发者可以轻松实现这...

    JAVA动态表单设计,自定义表单,自定义数据

    表单解析器将用户设计的表单转换为可执行的代码或数据结构,数据绑定器则负责将表单数据与后端数据库进行同步。 8. **POM.xml** 这是Maven项目的配置文件,用于管理项目的依赖、构建设置等。在动态表单项目中,它...

    数据结构 课件java版本

    10. **排序和查找算法**:包括快速排序、归并排序、冒泡排序、二分查找等,这些算法的实现通常会与特定数据结构结合。 本课件会详细讲解这些数据结构的原理、操作和Java实现,还会涉及到如何在实际问题中选择合适的...

    自定义实现常用数据结构 -java版代码.rar

    本压缩包提供的"自定义实现常用数据结构 - java版代码.rar"聚焦于几个关键的数据结构,包括HashMap、LinkedHashMap以及与之相关的红黑树。下面我们将深入探讨这些核心知识点。 首先,HashMap是Java中最常用的一种...

    java socket通信自定义消息协议

    总的来说,Java Socket通信自定义消息协议涉及网络编程基础、数据结构设计以及异常处理等多方面知识。通过这个过程,我们可以灵活地构建满足特定需求的通信系统,实现客户端和服务器间的高效交互。

    java数据结构测试题及答案解析.doc

    Java 数据结构测试题涉及到多个Java编程基础和设计概念,包括数据结构、软件设计工具、多分支语句(switch语句)、继承与多态、自定义表格模型以及并发控制。以下是这些知识点的详细解释: 1. **二分法查找**: - ...

    java根据特定模板生成pdf

    在这个项目中,我们使用了特定的模板来创建PDF,这使得我们可以自定义文档的布局和内容。主要涉及到的技术包括Java、PDF生成库以及模板引擎。 首先,我们要了解的是Java PDF库——iText。iText是一个开源的Java库,...

    数据结构(Java)课程设计:停车场管理系统

    - **MyStack**: 可能是一个自定义的栈数据结构,用于某些特定场景下的辅助操作,比如车辆在满载情况下进入候车区的逻辑处理。栈是一种后进先出(LIFO)的数据结构。 - **ListNode**: 这是链表节点类,通常用于存储...

    java文件加密解密实例(自定义、异或、AES、DES)

    在实际应用中,自定义加密常用于补充标准算法,例如在特定数据结构上添加额外的安全层。 接下来是异或(XOR)加密。异或是一种简单的逻辑运算,可以用于构建简单的加密算法。XOR加密的实现相当直观,两个位进行异或...

    Java 数据结构 面试用

    本资料包主要聚焦于Java实现的数据结构,旨在帮助面试者深入理解并掌握这些核心概念。下面我们将详细探讨一些关键的数据结构及其在Java中的应用。 1. **数组**:数组是最基础的数据结构,它是一系列相同类型元素的...

    数据结构与算法(Java语言版)含有源码

    例如,Java集合框架(java.util包)为实现各种数据结构提供了基础类,如List、Set和Map接口,以及其实现类。同时,Java的异常处理、多线程、IO流等功能,对于处理复杂问题非常有帮助。 4. 源代码:提供的源码.zip...

    java 数据结构code

    总结来说,这个压缩包包含的Java代码涵盖了多种数据结构,包括但不限于二叉树(如快速排序的实现和可能的自定义树结构)、链表以及可能用于3D建模或图形处理的特定数据结构。这些代码示例对于学习和理解Java中数据...

    数据结构-基于Java的算法和数据结构源码.zip

    在Java中,数据结构不仅可以通过内置的库如java.util来使用,开发者还可以根据特定需求自定义数据结构。自定义数据结构是算法设计的基础,它使得算法可以操作具有特定行为和性能特征的数据组织形式。 数据结构通常...

    数据结构与算法分析(java语言描述)中文第二版以及习题答案

    在Java中,可以使用内置的数据结构如ArrayList、LinkedList、HashMap等,同时也可以自定义数据结构以满足特定需求。《数据结构与算法分析》将深入讲解这些概念,如何选择合适的数据结构,以及它们的实现和操作。 2....

    java自定义集合类

    自定义集合类则是开发者根据特定需求扩展Java集合框架的行为,以满足个性化或特定业务场景的功能需求。以下是对"java自定义集合类"这一主题的详细解释。 首先,Java集合框架包括接口(如List、Set、Map)和实现这些...

    数据结构(JAVA版)教学课件

    JAVA中,这些数据结构可以通过内置类(如ArrayList、LinkedList)或自定义类来实现。 第二章:线性表是一种基本的数据结构,包括顺序表和链表两种形式。在JAVA中,ArrayList和LinkedList分别对应于顺序表和链表。...

    Java自定义异常源代码

    如果需要,可以为自定义异常添加额外的属性(如错误码、特定数据)和方法,以增强其功能。 三、使用自定义异常 1. **抛出异常** 在适当的地方使用`throw`关键字抛出自定义异常。这可以是在方法内部检测到错误条件...

    java 数据结构及算法讲义

    在Java中,这些数据结构可以通过内置类(如ArrayList、LinkedList、HashMap等)或自定义类来实现。理解它们的工作原理和性能特性是优化代码的关键。 接下来,我们讨论算法。算法是一系列解决问题的步骤,包括排序...

Global site tag (gtag.js) - Google Analytics