小编sid*_*178的帖子

为什么FileChannel.map会占用Integer.MAX_VALUE数据?

我在使用FileChannel.map时遇到异常

Exception in thread "main" java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE
    at sun.nio.ch.FileChannelImpl.map(Unknown Source)
    at niotest.NioTest.readUsingNio(NioTest.java:38)
    at niotest.NioTest.main(NioTest.java:64)
Run Code Online (Sandbox Code Playgroud)

快速寻找到的OpenJDK执行显示,在方法映射(..)FileChannelImplsize型的long作为输入.但是在体内,它比较它Integer.MAX_VALUE并且如果它大于那个则抛出错误.为什么将long尺寸作为输入但是将其限制为最大integer长度?

有谁知道这个实现背后的具体原因?还是某种虫子?

源URL - http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/nio/ch/FileChannelImpl.java

我在64位Windows-2k8上使用64位JRE运行此程序

java io nio

13
推荐指数
1
解决办法
6157
查看次数

XMLStreamReader没有关闭打开的xml文件

要使用XMLStreamReader我正在初始化它像 -

XMLInputFactory f = XMLInputFactory.newInstance();
XMLStreamReader reader = f.createXMLStreamReader(new FileReader(
        "somefile.xml"));
Run Code Online (Sandbox Code Playgroud)

迭代它像 -

if (reader.hasNext()) {
    reader.next();
    // do something with xml data
}
Run Code Online (Sandbox Code Playgroud)

最后关闭它像 -

reader.close();
Run Code Online (Sandbox Code Playgroud)

这看起来是正常的流程,但我看到一些奇怪的行为.即使在关闭阅读器之后,OS也不允许我删除/移动xml文件,除非我退出java程序.在Win2k8服务器上运行时,我收到错误消息,说java.exe正在使用此xml文件.

所以我有几个问题 -

  1. 我是否需要明确关闭每个FileReader的关闭?
  2. 如何找出保持此文件句柄处于打开状态的java代码路径.

看看XMLStreamReader的close()文档,我得到以下内容 - "释放与此Reader相关的任何资源.此方法不会关闭底层输入源."

"底层输入源"是什么意思?为什么不被读者关闭()?

java xml stream

7
推荐指数
1
解决办法
5438
查看次数

标签 统计

java ×2

io ×1

nio ×1

stream ×1

xml ×1