以上为FSDataInputStream的继承结构图,他的定义为:
public class FSDataInputStreamextends DataInputStreamimplements , , CloseableFSDataInputStream的主要作用就是用DataInputStream包装了一个输入流,并且使用BufferedInputStream实现了对输入的缓冲。
该类继承了DataInputStream父类,实现了,, Closeable三个接口。
FSDataInputStream实现了和接口,从而使Hadoop中的文件输入流具有流式搜索和流式定位读取的功能。
我们看一下接口的定义:
package org.apache.hadoop.fs;
import java.io.*;
/** Stream that permits seeking. */
public interface Seekable {
/**
从指定文件的pos位置,对文件流向前搜索。
*/
void seek(long pos) throws IOException;
/**
* 返回文件流中的当前偏移量
*/
long getPos() throws IOException;
/**在文件的另一个副本中的查找targetPos指定的位置,如果找到了targetPos的
* 位置返回true,否则返回FALSE。
*/
boolean seekToNewSource(long targetPos) throws IOException;
}
Seekable接口允许通过seek(long pos)方法在文件中进行定位,如果pos的值大于文件的长度,会出现IOException。此外,还可以通过getPos()方法返回当前位置相对于文件开头的偏移量。我们应用程序员一般不关心seekToNewSource(long targetPos)方法,此方法实现在文件的另一个副本中的查找targetPos指定的位置,如果找到了targetPos的位置返回true,否则返回FALSE。HDFS内部就通过这个方法实现当客户结点发生故障时为客户提供可靠的输入流。
FSDataInputStream也实现了接口,从而实现从指定位置读取一部分数据,该接口的定义如下:
public interfacePositionedReadable {
/**
该方法从文件的指定位置position向后读取最多length的字节,并将读取到的字节存储在buffer的指定偏移量offset位置上,该方法不会改变文件当前的偏移位置,并且是线程安全的。方法返回实际读取的字节数。
*/
public int read(long position, byte[] buffer, int offset, int length)
throws IOException;
/**
该方法从文件的指定位置position向后读取length的字节,并将读取到的字节存储在buffer的指定偏移量offset位置上,该方法不会改变文件当前的偏移位置,并且是线程安全的。该方法与上面方法的区别是:该方法读取的字节数是固定的就是length,而上面方法读取的字节数可能小于等于length。如果到达文件的末尾,则会抛出IOException
*/
public void readFully(long position, byte[] buffer, int offset, int length)
throws IOException;
/**
从文件的position位置开始读取长度为byte[] buffer长度的字节到字节数组buffer中。方法不会改变文件当前的偏移位置offset,并且是线程安全的。如果到达文件的末尾,则会抛出IOException。
*/
public void readFully(long position, byte[] buffer) throws IOException;
}
以上的方法都是线程安全的,而且保持了文件的当前位置,它主要是通过Seekable接口来实现的,如:
Long oldPos=getPos();
Try{
Seek(position);
//读取数据
}finally{
Seek(oldPos);
}
我们需要牢记seek()的开销很大,我们使用时需要很慎重。
分享到:
相关推荐
赠送jar包:hadoop-mapreduce-client-jobclient-2.6.5.jar; 赠送原API文档:hadoop-mapreduce-client-jobclient-2.6.5-javadoc.jar; 赠送源代码:hadoop-mapreduce-client-jobclient-2.6.5-sources.jar; 赠送...
赠送jar包:hadoop-yarn-client-2.6.5.jar; 赠送原API文档:hadoop-yarn-client-2.6.5-javadoc.jar; 赠送源代码:hadoop-yarn-client-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-yarn-client-2.6.5.pom;...
hadoop-annotations-3.1.1.jar hadoop-common-3.1.1.jar hadoop-mapreduce-client-core-3.1.1.jar hadoop-yarn-api-3.1.1.jar hadoop-auth-3.1.1.jar hadoop-hdfs-3.1.1.jar hadoop-mapreduce-client-hs-3.1.1.jar ...
赠送jar包:hadoop-yarn-common-2.6.5.jar 赠送原API文档:hadoop-yarn-common-2.6.5-javadoc.jar 赠送源代码:hadoop-yarn-common-2.6.5-sources.jar 包含翻译后的API文档:hadoop-yarn-common-2.6.5-javadoc-...
hadoop-eclipse-plugin-2.7.3和2.7.7的jar包 hadoop-eclipse-plugin-2.7.3和2.7.7的jar包 hadoop-eclipse-plugin-2.7.3和2.7.7的jar包 hadoop-eclipse-plugin-2.7.3和2.7.7的jar包
hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1
该资源包里面包含eclipse上的hadoop-1.2.1版本插件的jar包和hadoop-1.2.1.tar.gz,亲测可用~~请在下载完该包后解压,将hadoop-1.2.1放置于Eclipse\plugins目录下,然后重启eclipse,将hadoop-1.2.1.tar.gz放到D:\...
Apache Hadoop (hadoop-3.3.4.tar.gz)项目为可靠、可扩展的分布式计算开发开源软件。官网下载速度非常缓慢,因此将hadoop-3.3.4 版本放在这里,欢迎大家来下载使用! Hadoop 架构是一个开源的、基于 Java 的编程...
赠送jar包:hadoop-common-2.7.3.jar; 赠送原API文档:hadoop-common-2.7.3-javadoc.jar; 赠送源代码:hadoop-common-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-common-2.7.3.pom; 包含翻译后的API文档...
hadoop-common-2.4.1.jar,是学习基础的Hadoop必须的包
hadoop-eclipse-plugin-2.7.4.jar和hadoop-eclipse-plugin-2.7.3.jar还有hadoop-eclipse-plugin-2.6.0.jar的插件都在这打包了,都可以用。
flink-shaded-hadoop-3下载
hadoop-eclipse-plugin-3.1.1, hadoop eclipse 插件 3.1.1
赠送jar包:hadoop-yarn-server-resourcemanager-2.6.0.jar; 赠送原API文档:hadoop-yarn-server-resourcemanager-2.6.0-javadoc.jar; 赠送源代码:hadoop-yarn-server-resourcemanager-2.6.0-sources.jar; 赠送...
赠送jar包:hadoop-mapreduce-client-common-2.6.5.jar; 赠送原API文档:hadoop-mapreduce-client-common-2.6.5-javadoc.jar; 赠送源代码:hadoop-mapreduce-client-common-2.6.5-sources.jar; 赠送Maven依赖信息...
找不到与hadoop-2.9.2版本对应的插件,手动生成的hadoop-eclipse-plugin-2.9.2版本,
hadoop2 lzo 文件 ,编译好的64位 hadoop-lzo-0.4.20.jar 文件 ,在mac 系统下编译的,用法:解压后把hadoop-lzo-0.4.20.jar 放到你的hadoop 安装路径下的lib 下,把里面lib/Mac_OS_X-x86_64-64 下的所有文件 拷到 ...
赠送jar包:hadoop-auth-2.5.1.jar; 赠送原API文档:hadoop-auth-2.5.1-javadoc.jar; 赠送源代码:hadoop-auth-2.5.1-sources.jar; 赠送Maven依赖信息文件:hadoop-auth-2.5.1.pom; 包含翻译后的API文档:hadoop...
hadoop-2.6.0版本的apache和cdh版本
赠送jar包:hadoop-hdfs-client-2.9.1.jar 赠送原API文档:hadoop-hdfs-client-2.9.1-javadoc.jar 赠送源代码:hadoop-hdfs-client-2.9.1-sources.jar 包含翻译后的API文档:hadoop-hdfs-client-2.9.1-javadoc-...