【发布时间】:2013-01-18 03:54:13
【问题描述】:
filepointer 卡在导致StackOverflowError 的点。你能指出我这里到底出了什么问题吗?确切的错误是:java.lang.StackOverflowError
我正在寻找位置,因为记录宽度不固定。
这是一段代码:
private static void binarySearch(RandomAccessFile raf, String searchvalue, Long low, Long high) throws IOException
{
Long middle = (low + high) / 2;
Long mreal = null;
if(low > raf.length() -1 || high > raf.length()-1 || low >= high) {
System.out.println("Element not found:"); return ;
}
StringBuilder sb = new StringBuilder();
for(long filePointer = middle; filePointer != -1; filePointer--) {
raf.seek(filePointer);
int readByte = raf.readByte();
if(readByte == 0xA) {
break;
}
sb.append((char)readByte);
}
String lastLine = sb.reverse().toString();
System.out.println(lastLine);
mreal = raf.getFilePointer();
String str = raf.readLine();
System.out.println(str);
String values[] = str.split("\t",-1);
int compared = searchvalue.compareTo(values[fieldindex]);
System.out.println(fieldindex);
if(compared == 0) {
System.out.println("Value found. The other details:");
for(int i=0; i < values.length;i++)
System.out.print("\t" + values[i]);
return;
} else if(compared < 0)
binarySearch(raf,searchvalue,low,mreal-1);
else if(compared > 0)
binarySearch(raf,searchvalue,mreal,high);
}
堆栈跟踪:
线程“主”java.lang.StackOverflowError 中的异常
>at java.util.regex.Pattern$Node.<init>(Pattern.java:2993)
>at java.util.regex.Pattern$CharProperty.<init>(Pattern.java:3332)
>at java.util.regex.Pattern$CharProperty.<init>(Pattern.java:3332)
>at java.util.regex.Pattern$BmpCharProperty.<init>(Pattern.java:3363)
>at java.util.regex.Pattern$BmpCharProperty.<init>(Pattern.java:3363)
>at java.util.regex.Pattern$Single.<init>(Pattern.java:3391)
>at java.util.regex.Pattern.newSingle(Pattern.java:2951)
>at java.util.regex.Pattern.atom(Pattern.java:1985)
>at java.util.regex.Pattern.sequence(Pattern.java:1885)
>at java.util.regex.Pattern.expr(Pattern.java:1752)
>at java.util.regex.Pattern.compile(Pattern.java:1460)
>at java.util.regex.Pattern.<init>(Pattern.java:1133)
>at java.util.regex.Pattern.compile(Pattern.java:823)
>at java.lang.String.split(String.java:2292)
【问题讨论】:
-
Stackoverflow 错误是当您遇到无限循环或条件并且程序无法为其分配更多内存到堆栈上时。
-
试试调试器。或者为更小的功能编写小测试。在目前的形式中,问题“过于本地化”
-
异常的堆栈跟踪是什么?
-
@AlexKreutznaer :添加了堆栈跟踪
-
哦,知道了。无法给出整个堆栈跟踪 - 它没有尽头。
标签: java recursion stack-overflow binary-search random-access