HDFS客户端读数据时,都是通过ReaderStrategy接口的方法去读的。
这个ReaderStrategy接口的目标就是:封装不同的可能的读的实现,让调用者对读策略无感知(strategy-agnostic)。
ReaderStrategy接口定义了如下几个方法:
方法 | 描述 |
---|---|
ByteBuffer getReadBuffer() |
获取要把数据读到的Buffer |
int getTargetLength() |
获取要读的目标长度,即要读多少个字节的数据 |
int readFromBlock(BlockReader blockReader) |
使用block reader从一个block里读 |
int readFromBlock(BlockReader blockReader, int length) |
同上,额外增加了一个希望读的字节数length参数 |
int readFromBuffer(ByteBuffer src) |
从src buffer里读或者copy |
int readFromBuffer(ByteBuffer src, int length) |
同上,也是额外增了一个希望读的字节数参数 |
ReaderStrategy接口有两个实现类: