Hadoop FSDataInputStream重用来读取另一个文件

时间:2017-05-23 20:16:08

标签: java hadoop

我使用FSDataInputStream来阅读配置文件,并希望在阅读第二个配置文件之前知道我需要close() inputStreamfs

FileSystem fs = FileSystem.get(URI.create("file:///path/to/1.conf"), conf);
FSDataInputStream inputStream = fs.open(new Path("file:///path/to/1.conf"));
props1.load(inputStream);
...
...
FileSystem.get(URI.create("file:///path/to/2.conf"), conf);
inputStream = fs.open(new Path("file:///path/to/2.conf"));
props2.load(inputStream);
...
inputStream.close();
fs.close();

读取另一个重复使用inputstream的文件而不关闭它的文件是否安全?

1 个答案:

答案 0 :(得分:1)

是的,可以使用相同的FSDataInputStream对象来读取多个配置文件。

FSDataInputStream打开一个stream来读取指定文件位置的数据,并且在您调用read()方法时执行实际的阅读操作load
在你的代码中

FSDataInputStream inputStream = fs.open(new Path("file:///path/to/1.conf"));
props1.load(inputStream);

创建了input stream bufferprops1.load(inputStream)read逐行数据并将其存储在属性props1中,直到达到文件末尾。因此,inputStream buffer中存储的所有行都已被读取且为empty

在你的下一个代码中

 inputStream = fs.open(new Path("file:///path/to/2.conf"));
 props2.load(inputStream);

同样重复上述内容,但新文件和新properties object

您可以在代码末尾关闭FSDataInputStream。你应该一直关闭它。

我希望它清楚