gpt4 book ai didi

java - 从 FSDataInputStream 转换为 FileInputStream

转载 作者:可可西里 更新时间:2023-11-01 14:54:28 25 4
gpt4 key购买 nike

我是 Hadoop HDFS 的新手,对 Java 很生疏,我需要一些帮助。我正在尝试从 HDFS 读取文件并计算该文件的 MD5 哈希值。 Hadoop 的一般配置如下。

private FSDataInputStream hdfsDIS;
private FileInputStream FinputStream;
private FileSystem hdfs;
private Configuration myConfig;

myConfig.addResource("/HADOOP_HOME/conf/core-site.xml");
myConfig.addResource("/HADOOP_HOME/conf/hdfs-site.xml");

hdfs = FileSystem.get(new URI("hdfs://NodeName:54310"), myConfig);

hdfsDIS = hdfs.open(hdfsFilePath);

函数 hdfs.open(hdfsFilePath) 返回一个 FSDataInputStream

问题是我只能从 HDFS 中获取 FSDataInputStream,但我想从中获取 FileInputStream

下面的代码执行散列部分,改编 self 在 StackOverflow 某处找到的东西(现在似乎找不到它的链接)。

FileInputStream FinputStream = hdfsDIS;   // <---This is where the problem is
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
FileChannel channel = FinputStream.getChannel();
ByteBuffer buff = ByteBuffer.allocate(2048);

while(channel.read(buff) != -1){
buff.flip();
md.update(buff);
buff.clear();
}
byte[] hashValue = md.digest();

return toHex(hashValue);
}
catch (NoSuchAlgorithmException e){
return null;
}
catch (IOException e){
return null;
}

我需要 FileInputStream 的原因是因为执行散列的代码使用了 FileChannel,这据说可以提高从文件中读取数据的效率。

谁能告诉我如何将 FSDataInputStream 转换为 FileInputStream

最佳答案

将其用作InputStream:

MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
byte[] buff = new byte[2048];
int count;

while((count = hdfsDIS.read(buff)) != -1){
md.update(buff, 0, count);
}
byte[] hashValue = md.digest();

return toHex(hashValue);
}
catch (NoSuchAlgorithmException e){
return null;
}
catch (IOException e){
return null;
}

the code that does the hashing uses a FileChannel which supposedly increases the efficiency of reading the data from the file

在这种情况下不是。如果您只是将数据复制到另一个 channel ,如果您使用 DirectByteBuffer。 如果您正在处理数据,那么它只会提高效率,就像这里一样,它没有任何区别。读还是读。

关于java - 从 FSDataInputStream 转换为 FileInputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19099582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com