一个人如何学习Java?(将字节数组转换为十六进制字符串)

5

我知道这听起来像是一个广泛的问题,但我可以通过一个例子来缩小范围。我在Java方面非常新手。在我的“学习”项目中,我想创建一个内部MD5文件哈希器供我们使用。我开始非常简单,尝试对字符串进行哈希,然后再转到文件。我创建了一个名为MD5Hasher.java的文件,并编写了以下内容:

import java.security.*;
import java.io.*;
public class MD5Hasher{
    public static void main(String[] args){
        String myString = "Hello, World!";
        byte[] myBA = myString.getBytes();
        MessageDigest myMD;
        try{
            myMD = MessageDigest.getInstance("MD5");
            myMD.update(myBA);
            byte[] newBA = myMD.digest();
            String output = newBA.toString();
            System.out.println("The Answer Is: " + output);
        } catch(NoSuchAlgorithmException nsae){
            // print error here
        }
    }
}

我访问了java.sun.com,查看了java.security的javadoc,以了解如何使用MessageDigest类。阅读后,我知道我需要使用“getInstance”方法来获取可用的MessageDigest对象。Javadoc接着说:“使用update方法处理数据。”因此,我查看了update方法,并确定我需要使用其中一个,将我的字符串转换为字节数组并传递给它,因此我添加了这一部分。Javadoc继续说:“在更新所有要更新的数据之后,应调用digest方法之一来完成哈希计算。”我再次查看了方法,并发现digest返回一个字节数组,因此我添加了这一部分。然后,我对新的字节数组使用“toString”方法,以获得可以打印的字符串。但是,当我编译和运行代码时,打印出来的只有这个:

答案是:[B@4cb162d5

我在StackOverflow上找到了一些信息,发现了以下示例:(如何生成MD5哈希?)

String plaintext = 'your text here';
MessageDigest m = MessageDigest.getInstance("MD5");
m.reset();
m.update(plaintext.getBytes());
byte[] digest = m.digest();
BigInteger bigInt = new BigInteger(1,digest);
String hashtext = bigInt.toString(16);
// Now we need to zero pad it if you actually want the full 32 chars.
while(hashtext.length() < 32 ){
    hashtext = "0"+hashtext;
}

看起来我唯一会遗漏的部分可能是"BigInteger"部分,但我不确定。

因此,经过这一切,我想问的是,你怎么知道要使用“BigInteger”部分?我错误地认为我的newBA对象上的“toString”方法会将其转换为可读的输出,但显然我错了。一个人怎么才能知道在Java中该走哪条路?我有C语言背景,所以这个Java东西看起来很奇怪。有什么建议可以让我不必总是通过谷歌搜索如何做某些事情而变得更好吗?

感谢大家抽出时间阅读。 :-)


2
成为一名优秀的程序员,学会了解你的资源以及如何在什么时候和如何使用它们是非常重要的。谷歌是一个很好的资源,在为自己提升开发技能方面,充分利用谷歌绝不令人感到羞耻。其他资源包括你的同行开发者和自学教材。 - Jagd
11个回答

0
一个人在Java中应该如何知道该走哪条路?我有C语言的背景,所以这个Java看起来很奇怪。有什么建议可以让我不用一直“作弊”地Google如何做某件事而变得更好吗?
显然的答案是1-当你有问题时要使用Google(在我看来这并不算作弊),2-阅读相关主题的书籍。
除了这两点,我建议你尝试寻找一位导师。如果你在工作中没有经验丰富的Java开发人员,那么尝试加入当地的Java开发人员用户组。你可以在那里找到更有经验的开发人员,并向他们请教问题的答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接