Fix SpiderInfo parser

This commit is contained in:
seven332 committed 2016-03-11 23:00:47 +08:00
1 parent 5dd781a3fb
commit 95bdb85609
1 file changed
+22 -3
@@ -61,6 +61,25 @@ public class SpiderInfo {
}
}
private static int getStartPage(String str) {
if (null == str) {
return 0;
}
int startPage = 0;
for (int i = 0, n = str.length(); i < n; i++) {
startPage *= 16;
char ch = str.charAt(i);
if (ch >= '0' && ch <= '9') {
startPage += ch - '0';
} else if (ch >= 'a' && ch <= 'f') {
startPage += ch - 'a' + 10;
}
}
return startPage >= 0 ? startPage : 0;
}
@SuppressWarnings("InfiniteLoopStatement")
public static SpiderInfo read(@Nullable InputStream is) {
if (null == is) {
@@ -71,7 +90,7 @@ public class SpiderInfo {
try {
spiderInfo = new SpiderInfo();
// Start page
spiderInfo.startPage = Integer.parseInt(IOUtils.readAsciiLine(is), 16);
spiderInfo.startPage = getStartPage(IOUtils.readAsciiLine(is));
// Gid
spiderInfo.gid = Long.parseLong(IOUtils.readAsciiLine(is));
// Token
@@ -117,13 +136,13 @@ public class SpiderInfo {
OutputStreamWriter writer = null;
try {
writer = new OutputStreamWriter(os);
writer.write(String.format("%08x", startPage));
writer.write(String.format("%08x", startPage >= 0 ? startPage : 0)); // Avoid negative
writer.write("\n");
writer.write(Long.toString(gid));
writer.write("\n");
writer.write(token);
writer.write("\n");
writer.write('1');
writer.write("1");
writer.write("\n");
writer.write(Integer.toString(previewPages));
writer.write("\n");