Unterschied zweier "toString"-Methoden

Encera

Aktives Mitglied
Hallo zusammen,
ich habe eine Frage bezüglich der folgenden Methoden und zwar habe ich eine Map erstellt, welche zu einem Hash den dazu gehörenden Block speichert:
Java:
private Map<String, Block> blockCache;
Um den Hashwert von einem Byte-Array in einen String umzuwandeln habe ich einfach die normale "toString()"-Methode verwendet:
Code:
public void addBlock( Block block )
    {
        chain.add( block );
        blockCache.put(block.getBlockHash().toString(), block);
        
        for(Transaction trx : block.getTransactions()) {
            transactionCache.put(trx.getTxIdAsString(), trx);
        }
    }
Soweit so gut, allerdings hat mein Web-Interface Probleme damit das ganze korrekt zu verarbeiten, denn die Startseite meines Block-Explorers sieht dann wie folgt aus:
BlockExplorer1.PNG
Es wird immer nur der letzte gefundene Block angezeigt, es sollten aber die 10 letzten Blöcke angezeigt werden....

Hab dann meine Implementierung mit der Musterlösung verglichen und den Fehler schnell gefunden und zwar wandeln die den BlockHash mittels einer Hilfsklasse in einen Hex-String um:
Java:
public void addBlock( Block block )
    {
        chain.add( block );
        blockCache.put(SHA3Helper.digestToHex(block.getBlockHash()), block);
        
        for(Transaction trx : block.getTransactions()) {
            transactionCache.put(trx.getTxIdAsString(), trx);
        }
    }

Die Methode sieht folgendermaßen aus:
Code:
    public static String digestToHex( byte[] digest )
    {
        return Hex.toHexString( digest );
    }

Damit funktioniert auch das Web-Interface:
BlockExplorer2.PNG
Könnt ihr mir sagen woran das genau liegt? Ich denke mal weil ja ein HexadezimalerString nicht die gleichen Zeichen verwendet wie ein "normaler"String wegen Basis16 usw oder? Hab noch nicht soo oft mit dem Hexadezimalsystem gearbeitet und deshalb ist mir das auch nicht soo geläufig. Was mich halt verwirrt ist das wenn ich die "normale"toString() Methode verwende mir halt trotzdem zumindest ein Hash angezeigt wird, der btw vom Format her genauso aussieht wie die Hex-Srtings beim zweiten Screenshot.
Falls ich die HTML auch reinstellen soll kann ich das natürlich gerne machen. Die gab das Buch aber mehr oder weniger vor und ich kann HTML (noch) nicht deshalb kann ich dadrinnen nicht wirklich nachsehen aber vll. gibt es ja im JavaCode irgendwas das ich übersehe.

lg. ~
 
Schau doch mal mit dem Debugger, unter was für einem Key du da jeweils deine Daten in die Map packst. (Vermutlich verwendest du das gleiche Block-Object immer wieder, nur mit anderem Inhalt)
 

Neue Themen


Zurück
Oben