PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kleine Java Hilfe... BITTE


Gast
2006-05-31, 20:03:21
ich bin eigentlich nicht jemand der ohne selbst versuchen postet, aber ich hab schlicht und ergreifend keine ahnung wie ich anfangen soll .. ich poste mal die aufgabenstellung


Schreiben Sie ein Programm, das einen Hex-Dump von einer Datei ausgibt. Bei einer Text-Datei
mit dem Inhalt

Education's purpose is to replace an empty mind with an open one.

soll der Hex-Dump z. B. so (einfache Version):
45 64 75 63 61 74 69 6f 6e 27 73 20 70 75 72 70
6f 73 65 20 69 73 20 74 6f 20 72 65 70 6c 61 63
65 20 61 6e 20 65 6d 70 74 79 20 6d 69 6e 64 20
77 69 74 68 20 61 6e 20 6f 70 65 6e 20 6f 6e 65
2e 0a

aussehen

Die Ein- und Ausgabe-Dateien sollen als Kommandozeilen-Parameter eingegeben werden können.

--> wie das geht weiß ich

Schreiben Sie eine Klasse HexDumpOutputStream, die Sie von FilterOutputStream ableiten.
Verwenden Sie intern (d.h. außerhalb HexDumpOutputStream von nicht sichtbar) ein Objekt
vom Typ PrintStream. Diese Klasse bietet zum Beispiel die Methoden print, println, und
printf, mit der Sie Ihre Ausgabe formatieren können. Zweistellige Hexadezimalzahlen können
durch printf mit dem Format-String "%02x" ausgegeben werden.






hier hörts bei mir auf ich weiß einfach nich wie ich anfangen soll
bitte helft mir....

HellHorse
2006-05-31, 21:40:27
Das ist ein Einzeiler, noch viel einfacher als die es beschreiben.

Ok:

Du machst eine Subklasse FilterOutputStream names HexDumpOutputStream.
Du überschreibst den Konstruktor und rufst einfach den Superkonstruktor auf.
Den PrintStream brauchst du nicht.
Du überschreibst die #write(int) Methode, alle anderen Rufen die auf. Du konvertierst den Integer in einen Hex-String, das geht einfach per String.format("%02x", argument) (http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#format(java.lang.String,%20java.lang.Object...)) konvertierst das in ein bytearray (per #getBytes() (http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#getBytes())) und schreibst es dann auf den inneren OutPutStream der Instanzvariable out.

Das wars dann schon.

Gast
2006-06-01, 07:07:10
Hi, danke ich denke dass ich den sinn auch verstanden habe, jedoch redest du in einer zu hohen sprache für mich. tut mir leid aber ich kenne die ganzen sprachelemente nicht so gut geht das nicht einfacher? du verwendest das selbe vokabular wie der prof in den vorlesungen - da kommt man einfach nicht mit :P

mithrandir
2006-06-01, 07:58:53
Dere!

Ich hab's jetzt Java 1.4 kompatibel gelöst mit Integer#toHexString() anstatt String#format(). Die Klasse könnte so aussehen (übrigens ungetestet):

public class HexDumpOutputStream extends FilterOutputStream
{
/**
* Konstruktor ruft Superkonstruktor auf (FilterOutputStream)
*/
public HexDumpOutputStream( OutputStream out )
{
super( out );
}

/**
* Methode write der Superklasse wird ueberschrieben.
* @param b
*/
public void write( int b ) throws IOException
{
try
{
// Aus dem Uebergabeparameter vom Typ int einen String erzeugen.
// Diesen String so formatieren, dass er in der Hex-Darstellung ist.
// Dabei hilft die huebsche Methode toHexString der Wrapperklasse.
String strHexRepresentation = Integer.toHexString( b );

// Wir brauchen nun aber ein ByteArray.
// TODO Evtl. als Parameter das gewuenschte Charset angeben
byte[] bHexRepresentation = strHexRepresentation.getBytes();

// Nun einfach schreiben:
this.out.write( bHexRepresentation );

// Oder alternativ als Einzeiler:
this.out.write( Integer.toHexString( b ).getBytes() );
}
// TODO Evtl. sinnvolles Exceptionhandling einfuegen
catch( Exception ex )
{
super.write( b );
}
}
}

Du siehst schon, dass es eigentlich jeweis nur ein Einzeiler ist, also nichts schwieriges. So wie es in der Aufgabenstellung steht, ist das doch bereits ausprogrammiert und du musst es nur noch abschreiben. Vielleicht sagst du uns ja, welche Ausdrücke du nicht ganz kapierst, wir helfen gerne nach. Noch besser wär's allerdings vielleicht evtl. einmal die Einstiegskapitel des einen oder anderen Java-Buches (gerne auch online (http://www.javabuch.de/)) zu lesen.

bye, Peter

HellHorse
2006-06-01, 17:57:37
Gast[/POST]']Hi, danke ich denke dass ich den sinn auch verstanden habe, jedoch redest du in einer zu hohen sprache für mich. tut mir leid aber ich kenne die ganzen sprachelemente nicht so gut geht das nicht einfacher?
Nein.
Gast[/POST]']du verwendest das selbe vokabular wie der prof in den vorlesungen - da kommt man einfach nicht mit :P
Dann schlage ich vor, du lernst es.