2014-09-26 22 views
1
public static void main(String[] args) { 
    try { 
     String name = "i love my country"; 
     byte[] sigToVerify = name.getBytes(); 
     System.out.println("file data:" + sigToVerify); 
     String name1 = "data"; 
     byte[] sigToVerify1 = name1.getBytes(); 
     System.out.println("file data1:" + sigToVerify1); 

    } 
} 

我想執行上述程序,但getBytes()給了我不同的值String。在給定字符串執行多次時,有沒有辦法獲得相同的字節?String.getBytes()爲多個執行返回不同的值?

回答

8
System.out.println("file data:" + sigToVerify); 

此處不打印String的值。正如owlstead在評論中正確指出的那樣,將在字節數組sigToVerify上調用Object.toString()方法。導致這種格式的輸出:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

如果要打印數組中的每個元素,您必須遍歷它。

byte[] bytes = "i love my country".getBytes(); 
for(byte b : bytes) { 
    System.out.println("byte = " + b); 
} 

或者甚至更簡單,使用Arrays.toString()方法:

System.out.println(Arrays.toString(bytes)); 
+2

「類Object的toString方法返回一個字符串,它包含對象爲實例的類的名稱,符號字符」@「和該符號的哈希碼的**無符號十六進制表示目的**。」 – 2014-09-29 19:33:30

+0

@owlstead哇..聽起來很合理。你能否提供該報價的鏈接,我可以把它放在答案中? – 2014-09-29 20:22:11

+0

當然,它是[toString()](http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()) - 如果你將它移動到你的答案中確定你@owlstead我(我會刪除downvote並把它變成upvote,其餘的答案似乎聲音) – 2014-09-29 21:31:15

1

嘗試打印出的字節數組代替可變

for(byte b : sigToVerify) 
    System.out.print(b +"\t"); 

如果了toString()結果的內容打印的字節是相同的,那麼你很好。