Anzeige:
Ergebnis 1 bis 9 von 9

Thema: [Java] CRC32 aus String

  1. #1
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444

    [Java] CRC32 aus String

    Hi,

    ich bin Java-Neuling(kann mittelmaessig Perl, etwas C, etwas weniger C++)
    mein grundsätzliches Problem liegt darin aus einem String einen CRC32-Wert zu ermitteln. Die CRC32 Klasse braucht aber einen Byte-/Bytearraydatentyp. Die mir am logischsten vorkommende Methode ist die Klasse String um eine Methode z. B.

    CRC32 public getcrc32()

    zu erweitern die sich dann wiederum der crc32-Methoden bedient um den gewuenschten Wert zu erhalten. Dann habe ich aber was von finalen Klassen gelesen, die man nicht erweitern kann und das String vielleicht so eine Klasse ist. a)Geht das oder geht das nicht?

    b)Ist es einfach moeglich(vorhandene Methode) einen String in ein Bytearray umzuwandeln?

    EDIT Zu b) hab ich gerade was gefunden das das Problem löst. Aber Variante a) wuerde mir immer noch besser gefallen, da ich eigentlich keine Lust habe mich mit dem CRC32-Objekt rumzuschlagen/EDIT

    Gruß
    fork
    Geändert von fork (01-02-2004 um 02:19 Uhr)

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Nix zu machen leider. Final Class und gut is

    StringBuffer (auf dem String aufbaut und das man alternativ auch verwenden könnte ist leider auch final )

    In vielen Fällen empfiehlt es sich allerdings statt CRC32 MD5 oder Sha1-Checksummen zu verwenden, da sicherer. Davon hat allerdings das Jdk keine Implementation dabei.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    > statt CRC32 MD5 oder Sha1-Checksummen zu verwenden

    Kann ich mir leider nicht aussuchen. CRC32 ist bereits in anderen Teilen des Programms verwendet.
    ---
    Ginge die Stringerweiterung in C++ ?

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477

    Re: [Java] CRC32 aus String

    Original geschrieben von fork
    EDITZu b) hab ich gerade was gefunden das das Problem löst. Aber Variante a) wuerde mir immer noch besser gefallen, da ich eigentlich keine Lust habe mich mit dem CRC32-Objekt rumzuschlagen
    Du kannst dir in einer Klasse eine statische Methode machen, die als Input einen String bekommt und als Output den Code hergibt.

    Irgendwelche Sachen in eine Stringklasse reinzupacken ist vielleicht auf dn ersten Blick bequem, geht aber ander Zielsetzung des OOP vorbei.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Stimmt. Denn ein erweiterter String mit CRC-Funktion würde es erforderlich machen, dass alle Strings von denen du die CRC willst Objekte dieser Klasse sind. Nicht sehr praktisch.

    Wenn du irgend einen guten Ort hast, wo du die static-Methode hintun kannst ist das allemal besser.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  6. #6
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    > ein erweiterter String
    Nicht das mich jemand falsch versteht, ich möchte nicht eine von String abgeleitete Klasse erstellen sondern Die "String"-Klasse selbst erweitern, das ich in meinem Projekt die Funktion String.getcrc32() zur Verfügung habe den ich auf normale String-Objekte anwenden kann.

    > Du kannst dir in einer Klasse eine statische Methode machen, die als Input einen String
    > bekommt und als Output den Code hergibt.

    So?
    Code:
    import java.util.zip.CRC32
    
    public class String2 {
    
            public static long crc(String a) {
    
            CRC32 c=new CRC32();
            c.update(a.getBytes());
            return( c.getValue() );
            }
    }
    Oder meinst Du mit einer Klasse z. B. die Klasse(n) in der ich die Checksummen brauche? Das fände ich dann aber als das absolute Gegenteil von OOP.

    > Irgendwelche Sachen in eine Stringklasse reinzupacken ist vielleicht auf dn ersten Blick
    > bequem, geht aber ander Zielsetzung des OOP vorbei.

    Nach meinem bisschen Verständnis von OOP ist das eigentlich besser Funktionen in die Klassen zu packen für die Sie da sein sollen. -> Einfache Anwendbarkeit. Inwiefern geht das an der Zielsetzung von OOP vorbei?
    Geändert von fork (02-02-2004 um 00:36 Uhr)

  7. #7
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Die Methode so ist ok. Würd ich wenn schon auch so machen.

    Die String-Klasse zu erweitern heisst hier wohl sicher mal Ableiten. Und dann die irgendwie ersetzen bzw. dazu schauen, dass deine und nicht die "normale" String-Klasse verwendet wird. Das geht so nicht wirklich.
    Allerdings führ das dann sicher zu Problemen mit Serialisieren/Objekte übertragen/etc. die dafür, dass du das ganz gut so erledigen kannst, viel zu öde sind.

    Selbst im JDK wurde einiges an Funktionalität so bereitgestellt (mit statischen Methoden).

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von fork
    > ein erweiterter String
    Nicht das mich jemand falsch versteht, ich möchte nicht eine von String abgeleitete Klasse erstellen sondern Die "String"-Klasse selbst erweitern, das ich in meinem Projekt die Funktion String.getcrc32() zur Verfügung habe den ich auf normale String-Objekte anwenden kann.
    Eine vorhandene Klasse kann man nicht direkt verändern, sondern nur durch Ableitung eine neue Klasse erzeugen, die die Eigenschaften erbt und diese verwendet.


    > Du kannst dir in einer Klasse eine statische Methode machen, die als Input einen String
    > bekommt und als Output den Code hergibt.

    So?
    Ja, so zum Beispiel.
    In der Java Standardbibliothek sind da als Beispiele etwa java.util.Arrays und java.lang.Math


    Oder meinst Du mit einer Klasse z. B. die Klasse(n) in der ich die Checksummen brauche? Das fände ich dann aber als das absolute Gegenteil von OOP.
    Nicht unbedingt.
    Wenn du die CRC Summe nur einer Stelle in einer Klasse braucht, schreibst du es direkt dort.
    Wenn du es in der selben Klasse öfter brauchst, schreibst du es in einer Methode dieser Klasse.
    Erst wenn du CRC in mehreren Klassen brauchst, die nichts miteinander zu tun haben, dann wird eine extra Klasse besser.



    > Irgendwelche Sachen in eine Stringklasse reinzupacken ist vielleicht auf dn ersten Blick
    > bequem, geht aber ander Zielsetzung des OOP vorbei.

    Nach meinem bisschen Verständnis von OOP ist das eigentlich besser Funktionen in die Klassen zu packen für die Sie da sein sollen. -> Einfache Anwendbarkeit. Inwiefern geht das an der Zielsetzung von OOP vorbei?
    Weil das ansich keine String Eigenschaft ist.
    Man kann CRC Summen von allen möglichen Sachen errechnen.
    Die CRC Klasse macht es allgemein für byte[], du könntest vo CRC ableiten und dort zB eine Methodenüberldung machen, also eine update() Methode, die einen String als Parameter nimm
    Code:
    public class StringCRC extends CRC
    {
        public void update(String s)
        {
            update(s.getBytes();
        }
    }
    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  9. #9
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    > Weil das ansich keine String Eigenschaft ist.
    Ja das macht Sinn.

    Heftigsten Dank an Euch.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •