Я знаю, что это звучит как широкий вопрос, но я могу сузить его на примере. Я ОЧЕНЬ новый на Java. Для одного из моих «обучающих» проектов я хотел создать собственный хэш-файл MD5 для использования нами. Я начал очень просто, пытаясь хешировать строку, а затем перейти к файлу позже. Я создал файл с именем MD5Hasher.java и написал следующее:Как человек изучает 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 для просмотра Javadocs для java.security, чтобы узнать, как использовать MessageDigest класс. После прочтения я знал, что мне нужно использовать метод getInstance для получения полезного объекта MessageDigest, который я мог бы использовать. Javadoc продолжил: «Данные обрабатываются с помощью методов обновления». Поэтому я просмотрел методы обновления и решил, что мне нужно использовать тот, где я подал ему байтовый массив моей строки, поэтому я добавил эту часть. Далее Джавадок сказал: «Как только все данные, которые будут обновляться, будут обновлены, один из методов дайджеста должен быть вызван для завершения вычисления хэша». Я снова посмотрел на методы и увидел, что дайджест вернул массив байтов, поэтому я добавил эту часть. Затем я использовал метод «toString» для нового байтового массива, чтобы получить строку, которую я мог бы распечатать. Однако, когда я составил и побежал код все, что распечатаны было это:
Отвечаю: [B @ 4cb162d5
Я сделал некоторые глядя вокруг здесь на StackOverflow и нашел некоторую информацию:
How can I generate an MD5 hash?
, который дал следующий пример:
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;
}
Это кажется только часть I МАЙ будет отсутствовать часть «BigInteger», но я не уверен.
Итак, после всего этого, я думаю, что я спрашиваю, откуда вы знаете, как использовать часть «BigInteger»? Я ошибочно предположил, что метод toString для моего объекта newBA преобразует его в читаемый вывод, но я, по-видимому, ошибался. Как человек должен знать, куда идти на Java? У меня есть фон в C, поэтому эта вещь Java кажется довольно странной. Любые советы о том, как я могу стать лучше, не «обманывать» Googling, как делать что-то все время?
Спасибо, что нашли время для чтения. :-)
трудный путь :) – Bozho
Часть того, чтобы быть хорошим программистом, изучает, кто и что ваши ресурсы, и когда и как их использовать. Google - это ресурс, и нет никакого стыда в использовании и злоупотреблении им, чтобы сделать себя более опытным разработчиком. Другие ресурсы - ваши коллеги-разработчики и/или книги для самостоятельного обучения. – Jagd
Возможный дубликат [Каковы наилучшие ресурсы для изучения Java (книги, веб-сайты и т. Д.)?] (Http://stackoverflow.com/questions/77839/what-are-the-best-resources-for-learning- java-books-websites-etc) – gnovice