我在Netbean中运行SAX Parser来提取1GB的XML数据并写入CSV文件。 当我使用小于1MB的测试数据时,我的程序运行正常。代码运行显示我期望的打印输出和生成的CSV文件是正确的。 接下来我用1GB XML运行我的代码。代码正在运行并显示预期输出大约30分钟(它能够成功读取XML中的第105439行), 之后,输出刚刚停止显示。在Netbean的底部,它表示该程序正在运行,尽管绿色条形停止流动。这持续了半个小时的虚无。然后我注意到了这个错误:
java.lang.IllegalArgumentException:必须预先排序内容 - 添加 值-2146647068小于先前值2147447602 at org.netbeans.core.output2.IntList.add(IntList.java:76)at org.netbeans.core.output2.AbstractLines.lineUpdated(AbstractLines.java:764) 在org.netbeans.core.output2.OutWriter.write(OutWriter.java:216)at org.netbeans.core.output2.OutWriter.doWrite(OutWriter.java:453)at at org.netbeans.core.output2.OutWriter.println(OutWriter.java:488)at at org.netbeans.core.output2.OutWriter.print(OutWriter.java:526)at at org.netbeans.core.output2.NbIO $ IOColorLinesImpl.println(NbIO.java:494) 在org.openide.windows.IOColorLines.println(IOColorLines.java:88)at org.apache.tools.ant.module.run.StandardLogger.formatColoredMessageWithTime(StandardLogger.java:353) 在 org.apache.tools.ant.module.run.StandardLogger.buildFinished(StandardLogger.java:318)[抓] 在 org.apache.tools.ant.module.bridge.impl.NbBuildLogger.buildFinished(NbBuildLogger.java:440) 在org.apache.tools.ant.Project.fireBuildFinished(Project.java:2093) 在 org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:290) 在 org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:541) 在 org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153)
有人告诉我,在我的代码中的某个地方,一个整数循环直到其最大值并且已经溢出。问题是我无法找到导致此问题的整数。我怀疑它可能与我的TreeSet有关,但我并没有真正使用这么大的数字,除非我弄错了。 以下超链接是我的代码dblp.java。很抱歉这个巨大的代码,但跳转到方法populateAuthorArray(...)。它由endElement(...)调用。请帮我制止我的错误。谢谢 http://www.sendspace.com/file/5z06yr
答案 0 :(得分:0)
我将在这里猜测并说下一个数字应该大于之前的值2147447602,但它大于2,147,483,647的最大整数值。
你的整数溢出了32位的signed int值,所以它进入了负数。 如果可以,请尝试使用long,最长可达9,223,372,036,854,775,807。
以下是Data Types
的参考资料希望这有帮助