首页 > 代码库 > org.apache.hadoop.fs-BufferedFSInputStream
org.apache.hadoop.fs-BufferedFSInputStream
封装了FSInputStream
1 package org.apache.hadoop.fs; 2 3 import java.io.BufferedInputStream; 4 import java.io.IOException; 5 6 7 /** 8 * A class optimizes reading from FSInputStream by bufferring 9 */10 //通过缓存优化FSInputStream读取11 12 public class BufferedFSInputStream extends BufferedInputStream13 implements Seekable, PositionedReadable {14 //两个接口在前面刚看过了,功能为...15 /**16 * Creates a <code>BufferedFSInputStream</code>17 * with the specified buffer size,18 * and saves its argument, the input stream19 * <code>in</code>, for later use. An internal20 * buffer array of length <code>size</code>21 * is created and stored in <code>buf</code>.22 *23 * @param in the underlying input stream.24 * @param size the buffer size.25 * @exception IllegalArgumentException if size <= 0.26 */27 public BufferedFSInputStream(FSInputStream in, int size) {28 super(in, size);29 }30 //通过跟踪父类代码知道对接了输入流“管道”,初始化了一个大小为size的buffer31 public long getPos() throws IOException {32 return ((FSInputStream)in).getPos()-(count-pos);33 }34 //返回现在的偏移量35 public long skip(long n) throws IOException {36 if (n <= 0) {37 return 0;38 }39 40 seek(getPos()+n);41 return n;42 }43 //跳过n长度后得到现偏移量44 public void seek(long pos) throws IOException {45 if( pos<0 ) {46 return;47 }48 // optimize: check if the pos is in the buffer49 long end = ((FSInputStream)in).getPos();50 long start = end - count;51 if( pos>=start && pos<end) {52 this.pos = (int)(pos-start);53 return;54 }55 56 // invalidate buffer57 this.pos = 0;58 this.count = 0;59 60 ((FSInputStream)in).seek(pos);61 }62 //实现了Seekable的seek方法63 public boolean seekToNewSource(long targetPos) throws IOException {64 pos = 0;65 count = 0;66 return ((FSInputStream)in).seekToNewSource(targetPos);67 }68 //.....69 public int read(long position, byte[] buffer, int offset, int length) throws IOException {70 return ((FSInputStream)in).read(position, buffer, offset, length) ;71 }72 73 public void readFully(long position, byte[] buffer, int offset, int length) throws IOException {74 ((FSInputStream)in).readFully(position, buffer, offset, length);75 }76 77 public void readFully(long position, byte[] buffer) throws IOException {78 ((FSInputStream)in).readFully(position, buffer);79 }80 }
org.apache.hadoop.fs-BufferedFSInputStream
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。