操作分布式文件之六:如何解析远程文件

假设通过FttpAdapter已经读取到远程文件中一部分数据,如下:
FttpAdapter fa = new FttpAdapter("fttp://10.232.20.151/home/log/1.log");
FttpReadAdapter reader = fa.getFttpReader();
byte[] bts = reader.readAll();


上面得到一个byte数组,那么如何解析它呢,可以通过byte初始化得到一个ByteReadParser
ByteReadParser brp = FileAdapter.getByteReadParser(bts);

ByteReadParser提供了方便的按数量,按行,按分割符,按结束符解析方法:

public byte[] read(int totalnum);
如:brp.read(100);//读前100个字符

 

public byte[] readLine();
如:new String(brp.readLine())//读一行字符,多次调用直到末尾

 

public byte[] read(byte[] split);
如:brp.read("@#$".getBytes());//读以“@#$”做分割符号的前面的字符段,多次调用直到末尾

 

public byte[] readLast(byte[] split);
如:brp.readLast("。".getBytes());//读最后一个以句号结尾的前面的字符段

 

FttpParseDemo演示使用ByteReadParser的基本解析操作

邮箱:Fourinone@yeah.net
企鹅群:241116021
demo源码指南及开发包下载地址:
http://www.skycn.com/soft/68321.html


操作分布式文件之七:如何并行读写远程文件

FttpAdapter是通过FttpReadAdapter的tryReadAll方法进行并行读
FttpAdapter fa = new FttpAdapter("fttp://10.232.20.151/home/log/1.log");
Result<byte[]> rs = fa.getFttpReader().tryReadAll();

 

调用tryReadAll会立即返回一个Result<byte[]>,但是不能马上获取到结果值,需要轮循检查它的状态是否就绪
rs.getStatus()有三种状态:
Result.NOTREADY 未就绪
Result.READY 就绪
Result.EXCEPTION 异常

轮循直到状态准备就绪:
while(rs.getStatus()==Result.NOTREADY);

状态就绪就可以通过getResult()获取到读取结果:
byte[] bts = rs.getResult();

 

可以对一个远程文件的不同部分同时并行读写,也可以对多个远程文件同时并行读写,比如:
String fttppath = "fttp://10.232.20.151/home/log/1.log";
FttpAdapter fa0 = new FttpAdapter(fttppath);
FttpAdapter fa1 = new FttpAdapter(fttppath);
FttpAdapter fa2 = new FttpAdapter(fttppath);
Result<byte[]> rs0 = fa0.getFttpReader(0,5).tryReadAll();
Result<byte[]> rs1 = fa1.getFttpReader(5,5).tryReadAll();
Result<byte[]> rs2 = fa2.getFttpReader(10,5).tryReadAll();
上面表示3个同时并行的读取,分别的从一个文件的0,5,10位置向后读5个字节。

如果是并行写,则是:
Result<Integer>[] rs0 = fa0.getFttpWriter(0,5).tryWrite("hello".getBytes());
Result<Integer>[] rs1 = fa1.getFttpWriter(5,5).tryWrite("world".getBytes());
Result<Integer>[] rs2 = fa2.getFttpWriter(10,5).tryWrite("fttp!".getBytes());

 

注意:上面fa0,fa1,fa2是3个不同的FttpAdapter,而不是同一个FttpAdapter,否则后面的getFttpReader指定的读取范围会覆盖前面的范围,导致产生意外错乱。由于是对同一个远程文件并行读写,所以fa0,fa1,fa2的fttppath相同,如果对多个远程文件并行读写,则fttppath不同。

 

FttpMulWriteReadDemo演示了并行对三个远程文件进行写,然后再并行进行读,在轮循状态时,如果就绪读取到结果后,将rs[i]设置为null表示不再重复检查。

 

邮箱:Fourinone@yeah.net
企鹅群:241116021
demo源码指南及开发包下载地址:
http://www.skycn.com/soft/68321.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值