我正在Netbean中运行SAX解析器,以提取1GB的XML数据并将其写入CSV文件。
当我使用小于1MB的测试数据时,我的程序可以完美运行。该代码将运行,显示我期望的打印输出,并且生成的CSV文件是正确的。
因此,接下来,我使用1GB XML运行代码。该代码正在运行,并显示了大约30分钟的预期输出(它能够成功读取XML的所有行,直到105439行),
之后,输出仅停止显示。在Netbean的底部,它表示程序正在运行,尽管绿色条形停止了。这又持续了半个小时的虚无。然后我注意到了这个错误:


  java.lang.IllegalArgumentException:内容必须预先排序-已添加
  值-2146647068小于之前的值2147447602
  org.netbeans.core.output2.IntList.add(IntList.java:76)在
  org.netbeans.core.output2.AbstractLines.lineUpdated(AbstractLines.java:764)
  在org.netbeans.core.output2.OutWriter.write(OutWriter.java:216)处
  org.netbeans.core.output2.OutWriter.doWrite(OutWriter.java:453)在
  org.netbeans.core.output2.OutWriter.println(OutWriter.java:488)在
  org.netbeans.core.output2.OutWriter.print(OutWriter.java:526)在
  org.netbeans.core.output2.NbIO $ IOColorLinesImpl.println(NbIO.java:494)
  在org.openide.windows.IOColorLines.println(IOColorLines.java:88)处
  org.apache.tools.ant.module.run.StandardLogger.formatColoredMessageWithTime(StandardLogger.java:353)
  在
  org.apache.tools.ant.module.run.StandardLogger.buildFinished(StandardLogger.java:318)[catch]
  在
  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

最佳答案

我将在这里进行猜测,并说下一个数字应大于先前的2147447602,但大于最大整数2147483483。

您的整数溢出了32位有符号的int值,因此它变为负数。
如果可以,请尝试长时间使用,最多可以使用9,223,372,036,854,775,807。

这是Data Types的参考

希望这可以帮助

10-08 04:10
查看更多