首页 > 代码库 > 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