1

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

java.lang.IllegalArgumentException:必须对内容进行预排序 - 附加值 -2146647068 小于 org.netbeans.core.output2.IntList.add(IntList.java:76) 处 org.netbeans.core.output2.AbstractLines 的前一个值 2147447602。 lineUpdated(AbstractLines.java:764) at org.netbeans.core.output2.OutWriter.write(OutWriter.java:216) at org.netbeans.core.output2.OutWriter.doWrite(OutWriter.java:453) at org.netbeans .core.output2.OutWriter.println(OutWriter.java:488) at org.netbeans.core.output2.OutWriter.print(OutWriter.java:526) at org.netbeans.core.output2.NbIO$IOColorLinesImpl.println(NbIO .java:494) 位于 org.apache.tools.ant.module.run.StandardLogger.formatColoredMessageWithTime(StandardLogger.java:353) 的 org.openide.windows.IOColorLines.println(IOColorLines.java:88)。 tools.ant.module.run.StandardLogger。buildFinished(StandardLogger.java:318)[catch] at org.apache.tools.ant.module.bridge.impl.NbBuildLogger.buildFinished(NbBuildLogger.java:440) at 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)执行.RunClassThread.run(RunClassThread.java:153)执行.RunClassThread.run(RunClassThread.java:153)

有人告诉我,在我的代码的某个地方,一个整数循环到它的最大值并溢出。问题是我找不到导致此问题的整数。我怀疑它可能与我的 TreeSet 有关,但我并没有真正使用这么大的数字,除非我弄错了。以下超链接是我的代码 dblp.java。抱歉,代码量很大,但请跳转到方法 populateAuthorArray(...)。它由 endElement(...) 调用。请帮助我停止我的错误。谢谢 http://www.sendspace.com/file/5z06yr

4

1 回答 1

0

我在这里猜测一下,下一个数字应该大于前一个值 2147447602,但它大于最大整数值 2,147,483,647。

你的整数溢出了 32 位有符号整数值,所以它变成了负数。如果可以,请尝试使用 long,它可以达到 9,223,372,036,854,775,807。

这是数据类型的参考

希望这可以帮助

于 2013-10-13T16:02:08.247 回答