概述使用javax.xml的Java中的错误文件描述符IOException
我使用标准的javax.xml包来parsinglinux机器上的一些XML文件。 我的代码如下:
try { // Prepare parser documentBuilder documentBuilder = documentBuilderFactory .newdocumentBuilder(); document document = documentBuilder.parse(file.getabsolutePath()); // This is line 397 XPath xPath = xPathFactory.newXPath(); … } catch(IOException e) { … }
一个documentBuilderFactory被多个线程访问,就像一个XPathFactory一样,我相信这是可以接受的用法。 使用上面的代码parsingXML文件时,偶尔会看到以下错误。
java.io.IOException: Bad file descriptor at java.io.fileinputStream.readBytes(Native Method) at java.io.fileinputStream.read(fileinputStream.java:229) at java.io.BufferedinputStream.fill(BufferedinputStream.java:229) at java.io.BufferedinputStream.read(BufferedinputStream.java:246) at org.apache.xerces.impl.XMLEntityManager$RewindableinputStream.read(UnkNown Source) at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(UnkNown Source) at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(UnkNown Source) at org.apache.xerces.parsers.XML11Configuration.parse(UnkNown Source) at org.apache.xerces.parsers.XML11Configuration.parse(UnkNown Source) at org.apache.xerces.parsers.XMLParser.parse(UnkNown Source) at org.apache.xerces.parsers.DOMParser.parse(UnkNown Source) at org.apache.xerces.jaxp.documentBuilderImpl.parse(UnkNown Source) at javax.xml.parsers.documentBuilder.parse(UnkNown Source) at mypackage.MyXmlParser.parsefile(MyXmlParser.java:397) at mypackage.MyXmlParser.access$500(MyXmlParser.java:51) at mypackage.MyXmlParser$1.call(MyXmlParser.java:337) at mypackage.MyXmlParser$1.call(MyXmlParser.java:328) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:284) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690) at java.lang.Thread.run(Thread.java:799)
我偶尔(〜10%的时间)看到下面的附加文本:
Caused by: java.io.IOException: Bad file descriptor at org.apache.xml.serializer.ToStream.flushWriter(ToStream.java:260) at org.apache.xml.serializer.ToXMLStream.enddocument(ToXMLStream.java:191) at org.apache.xalan.transformer.transformerIDentityImpl.enddocument(transformerIDentityImpl.java:983) at org.apache.xml.serializer.TreeWalker.traverse(TreeWalker.java:174) at org.apache.xalan.transformer.transformerIDentityImpl.transform(transformerIDentityImpl.java:410) … 9 more
当我手动检查文件时,我可以看到失败的文件和传递的文件之间没有区别。 我可以确认通过的文件是有效的XML,没有特殊字符或提前结束。
文件pipe理脚本linux和windows兼容
如何定义二进制文件和ASCII文件的EOF
监视audio文件以检查何时由另一个程序打开
linux获取文件夹及其子文件夹的大小到一定的深度
configurationNginx静态caching某些URL
有谁知道为什么这可能会发生,我怎样才能避免它?
> java -version java version \”1.5.0\” Java(TM) 2 Runtime Environment,Standard Edition (build pxa64dev-20061002a (SR3) ) IBM J9 VM (build 2.3,J2RE 1.5.0 IBM J9 2.3 linux amd64-64 j9vmxa6423-20061001 (JIT enabled) J9VM – 20060915_08260_LHdSMr JIT – 20060908_1811_r8 GC – 20060906_AA) JCL – 20061002
如何复制前缀为“ – ”的文件?
我怎样才能修改我的Perl脚本使用多个处理器?
在windows文件系统中,每个文件都有一个预先计算的哈希值?
windows文件创build时间戳可靠吗?
如何从文件描述符中获取file *stream?
它看起来像一个并发线程的问题。
这个错误可能在你向我们展示的codelet之外。 但也与documentBuilderFactory和XPathFactory我不知道,如果他们是线程安全的; 在文档中没有提到。
对于第一次测试,我建议您将解析XML文件的整个代码放入synchronized {}子句中。 如果这解决了你的问题,那么它肯定是一个多线程问题。 在这种情况下,你必须找出必须同步的代码的最小部分。
总结
以上是内存溢出为你收集整理的使用javax.xml的Java中的错误文件描述符IOException全部内容,希望文章能够帮你解决使用javax.xml的Java中的错误文件描述符IOException所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容