简单的做了持久化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;
}
}
分享到:
相关推荐
缓存List并写入文件持久化.zip
iOS中有五种持久化数据的方式:属性列表、对象归档、NSUserDefault、SQLite3和Core Data 本文章讲述通过属性列表的方式持久化数据,这个方法也是我们平时最经常用到的方式。比如应用程序的配置和个性化的设置,一般...
基于redis和mysql的数据持久化方案 redis运行时连接数据库 cache失效时同步读mysql, 数据修改时候通过消息队列通知DB线程写mysql reids.conf增加几个配置选项 mysql_host mysql_port mysql_user mysql_pwd mysql_...
Memlink是一个高性能、持久化、分布式的Key=>List/Queue数据引擎。正如名称中的Mem所示,所有数据都建构在内存中,保证了系统的高性能,同时使用块链进行内存压缩,使用redo-log技术保证数据的持久化。此外,Memlink...
在Struts中,循环显示List中的数据使用什么标签? 如何使用MVC模式组织Java Web应用? 程序的DAO层(数据访问层)完成什么任务?
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习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...
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...
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...
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(Remote Dictionary Server)是一个开源的、使用ANSI C语言编写的、支持网络连接的、基于内存并可持久化的日志型Key-Value数据库,它提供了多种语言的API。Redis的主要特点包括: 数据类型丰富:Redis支持...
而这些持久化存储大多数使用了如LevelDB、 RocksDB、LMDB持久化引擎来实现数据的持久化存储;京东的JIMDB主要分为两个版本:LevelDB和LMDB,而我们看到的京东商品详情页 就是使用LMDB引擎作为存储的,可以实现海量KV...
持久化文件读写: 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警报进行程序性持久化。 CalendarPersist JXA脚本允许通过macOS Calendar.app警报进行程序性持久化。 有关完整的信息,请阅读:...
Ardb是一个新的构建在持久化Key/Value存储实现上的NoSQL DB服务实现,支持list/set/sorted set/bitset/hash/table等复杂的数据结构,以Redis协议对外提供访问接口。 Ardb的基本特性如下: 完全兼容Redis...
Memlink是天涯社区开发的一个高性能、持久化、分布式的Key-list/queue数据引擎。正如名称中的memlink所示,所有数据都 建构在内存中,保证了系统的高性能 (大约是redis几倍),同时使用了redo-log技术保证数据的持久...
0301 Redis数据持久化 0302 RDB持久化机制 0303 RDB数据恢复案例 0304 AOF持久化机制. 0305 AOF数据恢复案例 0306 Redis线程模型 0307 Redis过期数据淘汰 0308 listpack 0309 碎片整理 0310 SLOWLOG 0311 Latency ...
NutsDB支持事务,但不是标准的ACID事务(参见限制和警告)。所有的操作都在事务中执行。NutsDB从v0.2.0版本开始支持多种数据结构,如列表(list)、集合(set)、有序集合(sorted set)。
有弹性的持久化数据结构二项堆 module Queue.BinomHeap ( BinomTree , order , nodeCount , node , tree , tree1 , root , mergeTrees , insertTree , insertNode , fromList , findMinimum , takeMinimum ) where ...