`
zsybupt
  • 浏览: 41841 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[转载]hadoop--FSDataInputStream(上)

 
阅读更多

以上为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()的开销很大,我们使用时需要很慎重。

分享到:
评论

相关推荐

    hadoop-mapreduce-client-jobclient-2.6.5-API文档-中文版.zip

    赠送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; 赠送...

    hadoop-yarn-client-2.6.5-API文档-中文版.zip

    赠送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最新版本3.1.1全量jar包

    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 ...

    hadoop-yarn-common-2.6.5-API文档-中文版.zip

    赠送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-3.3.4 版本(最新版)

    Apache Hadoop (hadoop-3.3.4.tar.gz)项目为可靠、可扩展的分布式计算开发开源软件。官网下载速度非常缓慢,因此将hadoop-3.3.4 版本放在这里,欢迎大家来下载使用! Hadoop 架构是一个开源的、基于 Java 的编程...

    hadoop-eclipse-plugin-2.7.3和2.7.7

    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.1

    hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1

    hadoop-eclipse-plugin-1.2.1.jar有用的

    该资源包里面包含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:\...

    hadoop-eclipse-plugin三个版本的插件都在这里了。

    hadoop-eclipse-plugin-2.7.4.jar和hadoop-eclipse-plugin-2.7.3.jar还有hadoop-eclipse-plugin-2.6.0.jar的插件都在这打包了,都可以用。

    hadoop-common-2.7.3-API文档-中文版.zip

    赠送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-2.6.0.tar.gz&hadoop-2.6.0-cdh5.16.2.tar.gz

    hadoop-2.6.0版本的apache和cdh版本

    flink-shaded-hadoop-3下载

    flink-shaded-hadoop-3下载

    hadoop-eclipse-plugin-3.1.1.tar.gz

    hadoop-eclipse-plugin-3.1.1, hadoop eclipse 插件 3.1.1

    hadoop-yarn-server-resourcemanager-2.6.0-API文档-中文版.zip

    赠送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; 赠送...

    hadoop-mapreduce-client-common-2.6.5-API文档-中英对照版.zip

    赠送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-eclipse-plugin-2.9.2

    找不到与hadoop-2.9.2版本对应的插件,手动生成的hadoop-eclipse-plugin-2.9.2版本,

    hadoop-eclipse-plugin-3.1.2.jar

    在eclipse中搭建hadoop环境,需要安装hadoop-eclipse-pulgin的插件,根据hadoop的版本对应jar包的版本,此为hadoop3.1.2版本的插件。

    hadoop-lzo-0.4.20.jar

    hadoop支持LZO压缩配置 将编译好后的hadoop-lzo-0.4.20.jar 放入hadoop-2.7.2/share/hadoop/common/ core-site.xml增加配置支持LZO压缩 <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl...

    hadoop-auth-2.5.1-API文档-中文版.zip

    赠送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...

Global site tag (gtag.js) - Google Analytics