6.7 解析远程文件
假设通过FttpAdapter已经读取到远程文件中一部分数据,如下:
- FttpAdapter fa = new FttpAdapter("fttp://192.168.0.1/home/log/1.log");
- FttpReadAdapter reader = fa.getFttpReader();
- byte[] bts = reader.readAll();
上面代码得到一个byte数组,那么如何解析这个数组呢,可以通过byte初始化得到一个ByteReadParser:
- ByteReadParser brp = FileAdapter.getByteReadParser(bts);
ByteReadParser提供了按数量、按行、按分割符、按结束符解析等很便利的方法:
(1)按数量
- public byte[] read(int totalnum);
(2)按行如:brp.read(100);表示读取前100个字符
- public byte[] readLine();
如:new String(brp.readLine())表示读取一行字符,多次调用直到末尾。注意,readLine是以"\r\n"为分割符号。
(3)按分割符
- public byte[] read(byte[] split);
如:brp.read("@#$".getBytes());表示读取以“@#$”做分割符号的前面的字符段,多次调用直到末尾。
(4)按结束符
- public byte[] readLast(byte[] split);
如:brp.readLast(“。”.getBytes());表示读取最后一个以句号结尾的前面的字符段。
按块读取后解析如何处理截断数据?根据内存大小一次读取8M~64M的数据,通过readLast找到最后一行前面的所有数据,根据byte[]大小记录好位置,然后再通过readLine按行解析这个byte[]。下一次往前读的时候从记录位置开始。
FttpParseDemo演示使用ByteReadParser的基本解析操作。
运行步骤如下:
1)启动ParkServerDemo:
- java -cp fourinone.jar; ParkServerDemo
2)在192.168.0.1机器上启动FttpServer:
- java -cp fourinone.jar; FttpServer 192.168.0.1
3)在本地运行ByteReadParser,远程读写192.168.0.1上的/home/log/b.log文件的内容并解析,b.log的内容可以自动更改:
- java -cp fourinone.jar; ByteReadParser
完整demo源码如下:
- // FttpParseDemo
- import com.fourinone.FttpAdapter;
- import com.fourinone.FttpException;
- import com.fourinone.FileAdapter;
- import com.fourinone.FileAdapter.ByteReadParser;
- public class FttpParseDemo
- {
- public static void main(String[] args){
- try{
- FttpAdapter fa = new FttpAdapter("fttp://192.168.0.1/home/log/b.log");
- byte[] bts = fa.getFttpReader(0,100).readAll();
- System.out.println(bts.length);
- ByteReadParser brp = FileAdapter.getByteReadParser(bts);
- byte[] splitbts = brp.read(" ".getBytes());
- System.out.println(new String(splitbts));
- byte[] linebts = brp.readLine();
- System.out.println(new String(linebts));
- byte[] lastbts = brp.readLast("googl".getBytes());
- System.out.println(new String(lastbts));
- }catch(FttpException fe){
- fe.printStackTrace();
- }
- }
- }