`
henry2009
  • 浏览: 93831 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

持久化list

    博客分类:
  • java
阅读更多

简单的做了持久化list的操作,方便网络传输数据,待时日可扩展为持久化队列系统或nosql数据库。为自主开发的的nosql作准备,以此为记:

package com.test.list;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * 持久化list对象
 * 
 * @author LiuZiHeng
 * @version
 * @date 2010-8-16
 */
public class ListToBytes {

	public byte[] int2Bytes(int val) {
		byte[] bval = new byte[4];
		bval[0] = (byte)(val >> 24);
		bval[1] = (byte)((val << 8) >> 24);
		bval[2] = (byte)((val << 16)>>24);
		bval[3] = (byte)((val << 24) >> 24);
		
		return bval;
	}
	
	public void saveList(OutputStream out, List<A> list) throws IOException {
		if(list == null || list.size() == 0) {
			return;
		}
		
		for(int i = 0; i < list.size(); i++) {
			A a = list.get(i);
			byte[] objb = ObjectToBytes(a);
			
			out.write(int2Bytes(objb.length));
			out.write(objb);
		}
	}
	
	
	/**
	 * Object to byte[]
	 * 
	 * @param obj
	 * @return
	 */
	public byte[] ObjectToBytes(Object obj) {
		

		ObjectOutput out = null;
		try {
			ByteArrayOutputStream byteout = new ByteArrayOutputStream();
			out = new ObjectOutputStream(byteout);
			out.writeObject(obj);
			byte[] buf = byteout.toByteArray();

			return buf;
		} catch (IOException e) {
			return null;
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
		
				}
			}
		}
	}

	/**
	 * byte[] to long
	 * 
	 * @param b
	 * @return
	 */
	public Object bytesToObject(byte[] b) {

		
		if (b.length > 0) {
			ObjectInput in = null;
			try {
				ByteArrayInputStream byteIn = new ByteArrayInputStream(b);
				in = new ObjectInputStream(byteIn);
				Object obj = in.readObject();

				if(obj != null) {
					return obj;
				}

			} catch (IOException e) {
				
				
			} catch (ClassNotFoundException e) {
				
				
			} finally {
				if (in != null) {
					try {
						in.close();
					} catch (IOException e) {
						
						
					}
				}
			}
			
			return null;
		} else {
		
			return null;
		}
	}
	
	public List getListFromSave(String filePath) {
		List<Object> l2 = new ArrayList<Object>();
		RandomAccessFile ram =null;
		try {
			ram = new RandomAccessFile(filePath, "r");
			
			while(ram.getFilePointer() != ram.length()) {
				int len = ram.readInt();
				byte[] buf = new byte[len];
				ram.readFully(buf);
				Object tmpa = bytesToObject(buf);
				l2.add(tmpa);
			}

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(ram != null) {
				try {
					ram.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
		return l2;
	}
	
	public static void main(String[] args) {
		ListToBytes ltb = new ListToBytes();
		List<A> list = new ArrayList<A>();
		A a = new A("a", 1);
		A a2 = new A("b", 2);
		A a3 = new A("c", 3);
		
		list.add(a);
		list.add(a2);
		list.add(a3);
		
		System.out.println("list before mod:");
		for(A ab : list) {
			System.out.println(ab.getA() + "->" + ab.getB());
		}
		
		
		FileOutputStream out = null;
		try {
			out = new FileOutputStream("./savelist/list.f");
			ltb.saveList(out, list);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				out.flush();
				out.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		System.out.println("\nmod list:");
		list.get(0).setA("a11");
		for(A ab : list) {
			System.out.println(ab.getA() + "->" + ab.getB());
		}
		
		System.out.println("\nload it from save:");
		List l2 = ltb.getListFromSave("./savelist/list.f");
		
		for(Object a22 : l2) {
			System.out.println(((A)a22).getA() + "=" + ((A)a22).getB());
		}
	}
}

class A implements Serializable {

	private static final long serialVersionUID = -2278862909904751331L;
	
	private String a;
	private int b;
	
	public A(String a, int b) {
		this.a = a;
		this.b = b;
	}
	
	public void setA(String a) {
		this.a = a;
	}
	
	public String getA() {
		return a;
	}
	
	public void setB(int b) {
		this.b = b;
	}
	
	public int getB() {
		return b;
	}
}
 
0
0
分享到:
评论

相关推荐

    缓存List并写入文件持久化.zip

    本案例中,“缓存List并写入文件持久化”的主题聚焦于如何将内存中的数据,特别是列表(List)类型,存储到文件中,以实现数据的长期保存。下面我们将详细探讨这个过程,包括相关技术、步骤以及最佳实践。 首先,...

    数据持久化

    数据持久化是计算机科学中的一个重要概念,主要涉及如何将应用程序中的数据长期存储,即使在程序关闭后仍能保持不变。这使得数据可以在后续的程序运行中再次被访问和使用。在iOS开发中,数据持久化有多种实现方式,...

    Spring持久化模板总结

    在Spring框架中,持久化是将应用程序数据存储到数据库的关键环节。Spring提供了多种持久化模板,如JdbcTemplate和HibernateTemplate,以简化数据库操作并减少代码中的样板代码。这两个模板都是Spring JDBC模块的一...

    iphone 数据持久化的三个实例

    在iOS开发中,数据持久化是一项至关重要的技术,它使得应用程序的数据可以在用户关闭应用或设备重启后仍然保留。本文将通过三个具体的实例深入探讨iPhone上实现数据持久化的三种方法:属性列表、对象归档和SQLite3...

    jpa--2.持久化操作

    当一个实体被加入到持久化上下文时,它就被认为是持久化的,其状态会自动与数据库同步。持久化上下文是事务性的,意味着在同一个事务内,对同一实体的多次修改只会在事务提交时写入数据库一次。 ### 3. **...

    EJB3_JPA对象持久化文档

    ### EJB3_JPA对象持久化文档 #### JPA概述 **JPA**(Java Persistence API)是由Sun Microsystems推出的用于Java应用程序的数据持久化标准。它为开发者提供了一种灵活高效的方式来处理应用程序与底层数据存储之间...

    Java EE数据持久化框架测试题含答案.docx

    Java EE 数据持久化框架测试题含答案 Java EE 数据持久化框架是指在 Java 企业版(Enterprise Edition)中对数据持久化的解决方案。数据持久化是指将数据存储在磁盘或其他持久存储设备中,以便在需要时可以快速...

    hibernate持久化技术详解.孙卫琴.代码2

    **hibernate持久化技术详解** Hibernate是一款强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用中操作数据库的强大工具。通过Hibernate,开发者可以将数据库操作转化为对Java对象的操作,大大降低了...

    mybatis持久化dao生成工具

    标题 "mybatis持久化dao生成工具" 涉及到的主要技术是MyBatis,一个流行的Java持久层框架,以及Freemarker,一个强大的模板引擎。这个工具旨在自动化Spring MVC框架中的DAO(数据访问对象)、Service层代码的生成,...

    spring的quartz定时任务相关(持久化任务)

    ### Spring中的Quartz定时任务与持久化管理 #### 一、Spring与Quartz简介 Spring框架作为Java领域中广泛使用的轻量级应用框架之一,它提供了丰富的功能支持,包括依赖注入、面向切面编程以及MVC框架等。而Quartz是...

    持久化存储的 Map MapDB.zip

    除了基本的Map接口,MapDB还提供了其他数据结构,如Set、List、Queue和SortedSet等,这些数据结构同样支持持久化存储。通过这些接口,开发者可以方便地构建复杂的数据库解决方案,例如实现队列服务、索引服务等。 ...

    数据持久化方案redisDB.zip

    基于redis和mysql的数据持久化方案 redis运行时连接数据库 cache失效时同步读mysql, 数据修改时候通过消息队列通知DB线程写mysql reids.conf增加几个配置选项 mysql_host mysql_port mysql_user mysql_pwd mysql_...

    Memlink是一个高性能、持久化、分布式的Key=>List/Queue数据引擎

    ### Memlink:高性能、持久化的Key=&gt;List/Queue数据引擎 #### 一、Memlink概述 Memlink是一款由天涯社区研发并开源的数据引擎,旨在解决Web应用中对key-list/queue系统的需求。与传统的key-value系统相比,Memlink...

    Hibernate完成对象持久化

    在Struts中,循环显示List中的数据使用什么标签? 如何使用MVC模式组织Java Web应用? 程序的DAO层(数据访问层)完成什么任务?

    ios-数据持久化.zip

    在iOS中,常见的数据持久化方式有:SQLite数据库、Core Data框架、Property List (plist)、User Defaults以及文件系统存储等。 **2. 归档与解档** Objective-C和Swift提供了NSCoding协议,用于对象的序列化和反...

    Quartz2.2.1存储与持久化-基于Spring的配置

    在Quartz 2.2.1版本中,对存储和持久化进行了优化,以支持更高效、可靠的作业调度。在这个基于Spring的配置中,我们将深入探讨如何在Spring应用中集成Quartz,实现任务的存储和持久化。 首先,我们需要在Spring配置...

    iphone属性列表持久化存储

    本项目“iphone属性列表持久化存储”聚焦于利用属性列表(Property List,简称plist)来实现这一功能。属性列表是苹果操作系统中一种用于存储简单数据结构的格式,它支持字符串、数字、日期、数组、字典等多种数据...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     1.1.5 Java应用的持久化层  1.2 软件的模型  1.2.1 概念模型  1.2.2 关系数据模型  1.2.3 域模型  1.2.4 域对象  1.2.5 域对象之间的关系  1.2.6 域对象的持久化概念  1.3 小结  1.4 思考题 第2章 Java...

    EJB3.0持久化开发手册

    **EJB3.0持久化开发手册** EJB(Enterprise JavaBeans)3.0是Java企业版中的一个关键组件,它极大地简化了企业级应用程序的开发。EJB3.0引入了许多新特性,特别是持久化机制,使得数据库操作变得更加简单易用。本...

Global site tag (gtag.js) - Google Analytics