云计算环境下基于文件实现异步数据存储的方法_4

文档序号:9766023阅读:来源:国知局
taStore(" datastorename");
[0218] b)按设置的数据文件命名规则,查找到当前的数据文件
[0219] 从指定的数据文件存放路径中对所有的数据文件进行排序,找到当前序号最大的 文件名称,如果序号达到文件的最大存储个数,则从1开始的连续最大序号为当所需要保存 的文件名称。文件路径排序的伪代码如下:
[0220] Ariays , SOX t (d过t过Files, nsw Comp过i过toi<File>..(} { 挣Overri过污 public, int c:GTripare;(FiIe f.il.el. File, file's) f irrt in过色xl = g枉屯厅±1恒111<^色兴(f ilsl.); i.nt 'indsx2 二.g'e:[FileI.ridex (f-丄I芭:2.:}; r巧turn inde.x2 -in.de.xl,-. pr丄va〔s int get.F.ileln过ex {'File, flie) { S亡ring na'm芭=f ill.毎-?哥色-tNarne (); Strl:n.g index. :二 naine. substring (nam居.'in:ds《Of.(,. I)+1,打肆祀e . lastIndexOf (.) return 工nt台巧泛r.?巧a.亡selnt (inde:;x); } 一
[0221 ] c)数据文件指针移动到文件最后
[0222] 根据要写入的文件,打开文件,然后把文件指针移动到文件最后,写入数据,文件 的操作方式支持"读写"。
[0223] RandomAccessFile data民andAccessFile = new 民andomAccessFile(dataFile," rw );
[0224] dataRandAccessFile?seek(dataLength);
[0225] d)编码后的数据写入数据文件
[0226] 数据对象经过二进制编码后,形成字节数组,把数据写入到数据文件中。
[0227] data民andAccessFile.write(elementBuffer);
[0228] (8)保存数据索引到数据索引文件,包括W下步骤:
[0229] a)根据数据文件的名称,查找到当前的数据索引文件
[0230] 在数据写入数据文件时,根据找到的文件序号,按文件的命名规则,找到对应的数 据索引文件。
[0231] b)数据文件为新建,则新建数据索引文件,数据文件与索引文件名称相同,但文件 扩展名不同
[0232] C)数据索引文件指针移动到文件最后
[0233] 根据要写入的索引文件,打开文件,然后把文件指针移动到文件最后,写入数据, 文件的操作方式支持"读写"。
[0234] RandomAccessFile data民andIndexAccessFiIe = new RandomAccessFile (datalndexFile,"rw");
[023己] data民andIndexAccessFile.seek(dataLength);
[0236] d)按设定的格式,把对应的数据在数据文件中的起始、结束位置写入到数据索引 文件,在索引文件中,起始位置为当前数据在数据文件的位置,结束位置为起始位置与写入 数据长度之和。整形数据转换为8位字节的伪代码如下: IDUb-Ii贷这tatie void putL'ong-(byt.e'[] b, 1.0巧g VS-Iue.) { byte.[]亡打ip 二..new ]〇.yx:.e[,8]; pt;itLong :( tmp., value..).; Sys'亡em. arr却ycopy (tmp,亡mp . length. - b ...length',虹.,Q,. b. le.n.g亡h).'? } 一 |Dub.li贷这tatie void putL'ong.(byt.e'[] b., inti: off, long val) { b[aff- .+ 7]二..(byte)- (val >>> .0.);
[0237] 'b[..of.f + 6]二(byt芭)(:v图I >>> 苗); b [off + 石]二(byte) (val >:? 16); fo [:0'ff + 4] - (byte) (val >>>24);
[.挣f:-.f 中 3] = (byte.) (.val >>> 32').; 2]二..(byte)- (val ?> 40).; b[.off + 1]二(byt芭)(val ?> 48); b [off + 口]二(byte) (val >? 5毎.); }
[0238] (9)文件大小超过设置后自动生成新的数据文件,包括W下步骤:
[0239] a)判断当前数据文件的大小与设置文件的大小,是否新建数据文件。获取当前需 要写入数据文件的大小,与设置的文件最大值进行比较
[0240] b)数据文件已达到设置的最大值,则按指定的规则新建数据文件和数据索引文 件,把新文件名的序号依次递增。
[0241] 该实施例中的异步线程对数据文件中的数据转存储到关系型数据库的操作,其运 行的操作流程如图5所示,本操作包括W下步骤:
[0242] (10)启动守护线程,包括W下步骤:
[0243] a)新建守护线程,对数据文件进行后台处理
[0244] b)启动守护线程
[0245] C)针对每条数据调用数据处理逻辑,执行数据的转存
[0246] d)如果数据文件已处理完成,则线程等待,否则数据处理逻辑依次循环执行。 Thiread thread = new Thre却d (ne扣 Runnable () { QOverxide p.ub-l.i记 V-Oid runt) { //判断是否有数据需要处蘿
[0247] //数据逻辑处理 't纖 } }); thr色a过.荀tart《);
[0248] (11)读取数据处理指针文件中的内容,包括W下步骤:
[0249] a)判断数据处理指针文件的存在性,不存在则新建。此操作仅是针对第一次使用 时对处理指针文件的新建,后续操作一直使用此文件来记录当前处理的文件W及位置。
[0250] b)读取其中的内容,如果为空,则为处理指定目录下的所有文件,按文件的命名规 贝IJ,对文件列表进行排序,实现先进先出的原则。
[0251] C)按指定格式,读取数据处理指针文件中当前正在处理的数据索引文件位置W及 正在处理的数据文件名称,伪代码如下:
[0 巧 2] Rando.mAc.c.es.sFil芭打a肌in.g.R-a'n〔iAcces.sF.ile ~ new Rand诗扣AocessFiie Cf / "f挪"),-b.yteL] stari:b - ne扣 bYt-e:[8]; 打身mingRan过Acc芭s'sFil.e.. rea过.(startb.); naming区andAcc芭ssFilg.seek (S); long start = Bits . get Long (startb)!;: if (泛tart >-肌axFil6Siz芭{ //go. to nex仁 file i.s巨ndFile 二 true; } current民eadindex 二 start; long end 二 naming民andAccess-Fil巧.,I皂n荀.th b.yteL] fileN.劫meb - new byte [ (int.). (e打过-S:)..]; naming民andAccessFile . read (fileNameb). current民eadFileName .二打芭-W 谓tring'(.fi'reNam.eb.,"..UT.F-技
[0253] (12)数据文件中读取数据,包括W下步骤:
[0254] a)根据数据索引文件中指定的索引文件W及位置,读取索引文件中对应数据的起 始、结束位置
[0255] b)指定的数据文件的读指针移动到开始位置
[0256] C)从开始位置读取相应长度的数据
[0257] //索引文件处理
[02日8] RandomAccessFile index民andAccessFile.seek(current民eadindex);
[02己9] byte[]start = new byte[8];
[0260] index民andAccessFile.read(start);
[0261] byte[lend = new byte[8];
[0262] indexRandAccessFile.read(end);
[0263] //数据文件处理
[0264] dataRandAccessFile.seek(startlndex);
[0265] byte[ Jdata = new byte[ (int)length];
[0266] da1:aRandAccessFile .read(data);
[0267] ByteArrayInputStream instr = new ByteArr曰yInputStream(d曰t曰);
[0268] ObjectInputStream obj str = new Obj ectInputStream( instr);
[0269] result=(Serializable)obj str.readObj ect();
[0270] //索引文件处理
[0271 ] currentReadIndex = currentReadIndex+16;
[0272] byte[]ri=new byte[8];
[0273] Bits.putLong(ri,currentReadIndex);
[0274] namingRandAccessFile.seek(O);
[0275] naming
当前第4页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1