`
henry2009
  • 浏览: 90902 次
  • 性别: 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并写入文件持久化.zip

    iOS 数据持久化(一)plistDemo

    iOS中有五种持久化数据的方式:属性列表、对象归档、NSUserDefault、SQLite3和Core Data 本文章讲述通过属性列表的方式持久化数据,这个方法也是我们平时最经常用到的方式。比如应用程序的配置和个性化的设置,一般...

    数据持久化方案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数据引擎。正如名称中的Mem所示,所有数据都建构在内存中,保证了系统的高性能,同时使用块链进行内存压缩,使用redo-log技术保证数据的持久化。此外,Memlink...

    Hibernate完成对象持久化

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

    精通 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...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

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

     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...

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

     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...

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

     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...

    Redis非关系型数据库笔记-数据持久化-主从同步-缓存-笔记-五大数据类型-三大特殊数据类型

    Redis(Remote Dictionary Server)是一个开源的、使用ANSI C语言编写的、支持网络连接的、基于内存并可持久化的日志型Key-Value数据库,它提供了多种语言的API。Redis的主要特点包括: 数据类型丰富:Redis支持...

    Redis配合SSDB实现持久化存储代码示例

    而这些持久化存储大多数使用了如LevelDB、 RocksDB、LMDB持久化引擎来实现数据的持久化存储;京东的JIMDB主要分为两个版本:LevelDB和LMDB,而我们看到的京东商品详情页 就是使用LMDB引擎作为存储的,可以实现海量KV...

    详解python持久化文件读写

    持久化文件读写: f=open('info.txt','a+') f.seek(0) str1=f.read() if len(str1)==0: f1 = open('info.txt', 'w+') str1 = f.read() # 如果数据没有就写入数据到文件 time_list = [早上, 中午, 晚上] character...

    JXA脚本允许通过macOS Calendar.app警报进行程序性持久化。-Swift开发

    JXA脚本允许通过macOS Calendar.app警报进行程序性持久化。 CalendarPersist JXA脚本允许通过macOS Calendar.app警报进行程序性持久化。 有关完整的信息,请阅读:...

    NoSQL数据库Ardb.zip

    Ardb是一个新的构建在持久化Key/Value存储实现上的NoSQL DB服务实现,支持list/set/sorted set/bitset/hash/table等复杂的数据结构,以Redis协议对外提供访问接口。 Ardb的基本特性如下: 完全兼容Redis...

    天涯社区开源的NoSQL数据库 Memlink.zip

    Memlink是天涯社区开发的一个高性能、持久化、分布式的Key-list/queue数据引擎。正如名称中的memlink所示,所有数据都 建构在内存中,保证了系统的高性能 (大约是redis几倍),同时使用了redo-log技术保证数据的持久...

    Redis开发实战视频.zip

    0301 Redis数据持久化 0302 RDB持久化机制 0303 RDB数据恢复案例 0304 AOF持久化机制. 0305 AOF数据恢复案例 0306 Redis线程模型 0307 Redis过期数据淘汰 0308 listpack 0309 碎片整理 0310 SLOWLOG 0311 Latency ...

    Go-NutsDB是纯Go语言编写一个简单高性能内嵌型持久化的key-value数据库

    NutsDB支持事务,但不是标准的ACID事务(参见限制和警告)。所有的操作都在事务中执行。NutsDB从v0.2.0版本开始支持多种数据结构,如列表(list)、集合(set)、有序集合(sorted set)。

    resilient:持久化数据结构

    有弹性的持久化数据结构二项堆 module Queue.BinomHeap ( BinomTree , order , nodeCount , node , tree , tree1 , root , mergeTrees , insertTree , insertNode , fromList , findMinimum , takeMinimum ) where ...

Global site tag (gtag.js) - Google Analytics