InputStream.close()是java中的阻塞调用吗?

时间:2012-12-10 06:16:04

标签: java io inputstream

我从输入流中读取并在我的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;
        }

1 个答案:

答案 0 :(得分:-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,忘掉你的谜题。