2014-01-21 80 views
0

我在一個scala程序中使用Madcreator的Rabinfingerprint java庫,https://github.com/themadcreator/rabinfingerprintMadcreator Rabinfingerprint命令行vs java/scala程序

使用命令行我生成的不可約53度多項式:

java -jar rabinfingerprint.jar -polygen 53 
31DF3F8C7356D3 

然後指紋文件:

java -jar rabinfingerprint.jar -p 31DF3F8C7356D3 file.txt 
1847CCD86D5DE5 file.txt 

我在正在產生相同的輸出的問題,給出相同的輸入,使用代碼。

// Can't create Polynomial from hex above, so convert hex to long and use that: 
val polynomial = Polynomial.createFromLong(14037737891124947L) 
// val p = java.lang.Long.toString(14037737891124947L, 16) 
// p = 31DF3F8C7356D3 same as command line input 

val rabin = new RabinFingerprintLong(polynomial) 
rabin.pushBytes(text.getBytes) 

val fp = rabin.getFingerprintLong 
println(java.lang.Long.toString(fp, 16)) // 1acc76a73eed1f 
fp.toString // 7543159378603295 

// Where is 1847CCD86D5DE5 ? 
+0

當你從命令行在文件上運行指紋時,它每次產生相同的結果? – dmitry

+0

使用相同的多項式,是的。 –

+1

你是如何得到'text'的?您需要確保您沒有從字符串中刪除換行符等。 –

回答

0

正如我在評論上述註釋,如果您正在閱讀的文件的內容轉換成字符串,你要小心,你不去掉換行符或任何其他字符,如果例如,您打電話給source.getLines.mkString,您將失去換行符,這意味着您不會看到與驅動程序類which uses Guava's ByteStreams.toByteArray相同的結果。