-3

我从输入流中读取数据,并在 finally 块中尝试通过调用 in.close(); 来关闭它。但是 main 的执行被阻止了。出路是什么?

根据建议,我使用的代码是,

if (!processed) {
                System.out.println("in processed");
                byte[] contents = new byte[(int) fileSplit.getLength()];
                Path file = fileSplit.getPath();
                FileSystem fs = file.getFileSystem(conf);
                FSDataInputStream in = null;
                try {
                    in = fs.open(file);
                    IOUtils.readFully(in, contents, 0, contents.length);

                    value.set(contents, 0, contents.length);
                } finally {
                    System.out.println("before close stream");
                    IOUtils.closeStream(in);
                }
                processed = true;
                return true;
            }
            System.out.println("out of processed");
            return false;
        }
4

1 回答 1

-1

java.io.InputStream.close 没有阻塞,至少 API 从来没有这么说。比较 InputStream.read

 Reads the next byte of data from the input stream. The value byte is
 returned as an <code>int</code> in the range <code>0</code> to
 <code>255</code>. If no byte is available because the end of the stream
 has been reached, the value <code>-1</code> is returned. This method
 blocks until input data is available, the end of the stream is detected,
 or an exception is thrown.

和 InputStream.close

  Closes this file input stream and releases any system resources
  associated with the stream.

至于解决您的问题,我建议使用 Java 7 Files.readAllBytes 并忘记您的难题。

于 2012-12-10T06:35:04.697 回答