Klassen wie funktionieren Streams, warum bekomme ich int zurück?

Terry12

Aktives Mitglied
hi,

int anzahlBytesgelesen = System.in.read(eingabe);

warum gibt ausgerechnet das System.in.read mir ein int zurück? und nicht z.B ein string oder byte oder sonstwas...

und woher weiss ich dass
fos = new FileOutputStream("t.tmp");
mir ein neue File mit Namen t.tmp im Verzeichnis anlegt? was steckt dahinter?

und wenn ich was serialisiere, z.B eine Klasse Punkt, kann ich dann frei eingeben welche ENdung meine Datei nachher hat?


Code:
            Punkt p2 = new Punkt();
            p2.setX(33);
            Punkt p = new Punkt();
            p.setX(22);
            Vector vec = new Vector();
            vec.add(p);
            vec.add(p2);

            // Erstellung eines FileOutputStreams, damit wir in die Datei 
            // punkt.tmp schreiben können       
            fos = new FileOutputStream("punkt.tmp");

            ObjectOutputStream oos = null;

            try
            {
                // ObjectOutputStreams, der die eigentliche 
                // Schreibmethode enthält, wird mit dem 
                // FileOutputStream erzeugt.
                oos = new ObjectOutputStream(fos);

                // Schreiben des Vektors in eine Datei mit den Objekten 
                // der Klasse Punkt
                oos.writeObject(vec);

hier erzeuge ich punk.tmp , könnte ich auch z.B punkt.xyz erzeugen? und welcher Dateityp ist das dann intern? eine ganz normale ASCII bzw. Text Datei?
 

MR_UNIX

Bekanntes Mitglied
Hi,

ich versuche mal so gut wie möglich deine Fragen zu beantworten:

warum gibt ausgerechnet das System.in.read mir ein int zurück? und nicht z.B ein string oder byte oder sonstwas...
System ist eine Klasse mit einem statischen Attribut "in" vom Typ "InputStream". Die Methode "read()" ist in der Klasse InputStream definiert. Die Definition (s. JavaDoc - InputStream (Java Platform SE 7 ))) sagt eben aus, dass das nächste Byte aus dem vorliegenden Datenstrom (ein Datenstrom ist in erster Linie immer binär) gelesen wird und hier in Form eines "int" zurückgegeben wird. Wenn du auf der Konsole einen String eingibst und dann per "read()" ein Byte (also ein Zeichen des eingegebenen Strings in diesem Fall) einliest, bekommst du den ASCII Code des Zeichens wieder. Du könntest bspw. wenn du einen Buchstaben haben willst folgendes tun:

Java:
try {
    int buchstabeAlsInt = System.in.read();
    char buchstabe = (char) buchstabeAlsInt;
    System.out.println("Buchstabe: " + buchstabe);
} catch (IOException e) {
    e.printStackTrace();
}

Wenn du dann ein "a" eingibst, wird du sehen, dass du auch ein "a" wieder herausbekommst. Du musst also die Umwandlung vom binären Datenstrom in ein lesbares ASCII Zeichen selbst vornehmen. Wenn das automatisch passieren soll, musst du den InputStream "System.in" mit einem Reader dekorieren.
Was das mit dem dekorieren auf sich hat liest du dir am besten selbst durch, Stichwort: "java decorator pattern".

Das würde dann so aussehen:

Java:
try {
    InputStreamReader isr = new InputStreamReader(System.in);
    char[] string = new char[100];
    isr.read(string);
				
    System.out.println("Buchstabe: " + new String(string));
} catch (IOException e) {
    e.printStackTrace();
}

Hier packst du also den InputStream in einen InputStreamReader. Die Reader in Java sind eben genau für diese automatische Konvertierung von Binärdaten auf lesbare Zeichen. Anschließend kannst du ein char-Array erstellen (in diesem Fall bietet es Platz für 100 Zeichen) und dann eben aus dem Stream lesen und in das Array schreiben.

Nun zur nächsten Frage:
und woher weiss ich dass
fos = new FileOutputStream("t.tmp");
mir ein neue File mit Namen t.tmp im Verzeichnis anlegt? was steckt dahinter?

Nun, die Frage ist gar nicht so leicht zu beantworten. Woher man das weiß? Naja, man kann die JavaDoc zum Konstruktor vom FileOutputStream lesen und findet dann diesen Text:
Creates a file output stream to write to the file with the specified name. A new FileDescriptor object is created to represent this file connection.
First, if there is a security manager, its checkWrite method is called with name as its argument.

If the file exists but is a directory rather than a regular file, does not exist but cannot be created, or cannot be opened for any other reason then a FileNotFoundException is thrown.
Der zweite Absatz ist für deine Frage relevant. Er sagt aus, dass die Datei erstellt wird wenn möglich. Wenn das nicht möglich ist, wird eben eine Exception geworfen. Da diese Dokumentation von Oracle herausgegeben wird und Java von Oracle entwickelt wird/wurde, kann man ihr einfach blind vertrauen. Die genaue Implementierung dahinter wäre vermutlich ohnehin zu kompliziert.

Deine vorletzte Frage beantworte ich einfach mal etwas weniger ausführlich:
kann ich dann frei eingeben welche ENdung meine Datei nachher hat?
Ja. Die Endung ist ja in erster Linie nur "Deko" und wird halt als Erkennungszeichen genutzt. Aber nirgendwo ist wirklich vorgeschrieben, was welche Endung haben muss. Sowas wie .txt für Textdateien hat sich halt schon seit Ewigkeiten eingebürgert.

Nun die letzte Frage:
und welcher Dateityp ist das dann intern? eine ganz normale ASCII bzw. Text Datei?
Wenn du die erzeugte Datei mal mit einem Texteditor deiner Wahl öffnest, wirst du feststellen, dass du sie teilweise lesen kannst, aber auch teilweise seltsame Zeichen drin sind.
An sich ist ein serialisiertes Objekt erstmal eine Binärdatei wie eine .exe - nur eben nicht ausführbar.

Ich hoffe, ich konnte dir helfen!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dimax RegEx funktionieren nicht Java Basics - Anfänger-Themen 7
B Polymorphie Warum funktionieren polymorphe Referenzvariablen bei überschriebenen Methoden und bei nicht überschriebenen nicht? Java Basics - Anfänger-Themen 3
B Wie funktionieren diese Methoden in diesem Sortierverfahren genau? Java Basics - Anfänger-Themen 2
H Threads funktionieren nicht Java Basics - Anfänger-Themen 4
C GUI- Scrollpane will nicht funktionieren Java Basics - Anfänger-Themen 2
F Threads funktionieren auf JPanel nicht Java Basics - Anfänger-Themen 1
M Buttons funktionieren nicht Java Basics - Anfänger-Themen 4
K Compiler-Fehler Programme funktionieren nicht mehr Java Basics - Anfänger-Themen 5
C Erste Schritte Math.sin und Co. funktionieren nicht Java Basics - Anfänger-Themen 5
K Get-Methode will nicht funktionieren Java Basics - Anfänger-Themen 6
M IOTools funktionieren nicht Java Basics - Anfänger-Themen 14
Java-Insel Methoden FileWriter Methoden funktionieren nicht Java Basics - Anfänger-Themen 20
K Threads Nur 2 von 3 Threads funktionieren Java Basics - Anfänger-Themen 8
J Threads funktionieren nicht Java Basics - Anfänger-Themen 10
J Quartz Scheduler beispiele funktionieren nicht Java Basics - Anfänger-Themen 6
S Actionlistener funktionieren nicht in der .jar Java Basics - Anfänger-Themen 9
B Java und Javac funktionieren nicht - bitte hilfe Java Basics - Anfänger-Themen 5
P Datentypen Warum würde dieses Beispiel nicht funktionieren? Java Basics - Anfänger-Themen 6
F Applications funktionieren grundsätzlich nicht. Java Basics - Anfänger-Themen 4
S Schleife möchte nicht funktionieren Java Basics - Anfänger-Themen 5
J Window-Listener funktionieren nicht Java Basics - Anfänger-Themen 7
apple987123 JAR Files Funktionieren nicht Java Basics - Anfänger-Themen 6
P OOP Getter&Setter Methoden funktionieren nicht Java Basics - Anfänger-Themen 7
T Probleme bei einen Stack der über drei Dateien funktionieren soll Java Basics - Anfänger-Themen 5
K Buttons Funktionieren Nicht!!! Java Basics - Anfänger-Themen 8
H Iteratoren funktionieren nicht Java Basics - Anfänger-Themen 4
G Java-Frames funktionieren nach Neuinstallation nicht mehr. Java Basics - Anfänger-Themen 3
hdi bilder funktionieren im jar archiv nicht. Java Basics - Anfänger-Themen 3
T Warum kann Hashtable get Methode nicht funktionieren? Java Basics - Anfänger-Themen 3
T Methoden funktionieren nicht Java Basics - Anfänger-Themen 5
D Wie funktionieren FileReader Java Basics - Anfänger-Themen 6
B in der .Jar funktionieren nicht alle Funktionen Java Basics - Anfänger-Themen 18
megachucky Action-/Change Listener funktionieren nicht. Java Basics - Anfänger-Themen 2
T Pakete und "-cp_ funktionieren net zusammen Java Basics - Anfänger-Themen 2
N Int to String will nicht funktionieren Java Basics - Anfänger-Themen 14
G Methodenaufrufe funktionieren nicht Java Basics - Anfänger-Themen 2
M Arrays clonen mit clone() scheint nicht zu funktionieren Java Basics - Anfänger-Themen 4
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Parallel Streams Java Basics - Anfänger-Themen 18
W Streams in Java und was bedeutet meine Konsolen-Ausgabe? Java Basics - Anfänger-Themen 4
M Streams Java Basics - Anfänger-Themen 34
M Streams filter Java Basics - Anfänger-Themen 15
M generate Methode für Streams Java Basics - Anfänger-Themen 6
berserkerdq2 Java streams, wann nutze ich ::, also 2x Doppelpuntk bei Streams? Java Basics - Anfänger-Themen 5
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
berserkerdq2 IO Streams logfile erstellen und Sachen schreiben wie? Java Basics - Anfänger-Themen 2
D Verwirrung bei Streams aus primitiven Arrays Java Basics - Anfänger-Themen 2
B Collections Streams - Hilfestellung bei komplexer Struktur Java Basics - Anfänger-Themen 9
S Streams - Abfrage absteigend sortieren Java Basics - Anfänger-Themen 11
S Streams - kleinstes Element finden Java Basics - Anfänger-Themen 4
J String Array zu Map<Character, List<Character>> mit Streams Java Basics - Anfänger-Themen 1
Kirby.exe Fehlende Int Werte aus Array mit streams finden Java Basics - Anfänger-Themen 19
W Eclipse Autoformatierung für Streams ändern ? Java Basics - Anfänger-Themen 1
S Lambda Ausdrücke Streams Java Basics - Anfänger-Themen 6
I Streams Java Basics - Anfänger-Themen 12
N Frage zu Streams Java Basics - Anfänger-Themen 3
U Input/Output Unterschiede Streams Java Basics - Anfänger-Themen 2
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5
C system.out.printf mit streams benutzen Java Basics - Anfänger-Themen 7
C Methoden Sortieren mit Streams: Auf- und absteigend Java Basics - Anfänger-Themen 2
O Streams und die flush Methode Java Basics - Anfänger-Themen 3
P InputStream eines Musik-Streams abspielen Java Basics - Anfänger-Themen 2
M Input/Output Streams Java Basics - Anfänger-Themen 5
J Java 8 Streams - Frage zu "reduce" Java Basics - Anfänger-Themen 6
Sogomn Input/Output Reader, Writer und Streams Java Basics - Anfänger-Themen 6
T Fehler mit Streams! Java Basics - Anfänger-Themen 2
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
J Per I/O Streams in LinkedList oder ArrayList schreiben/lesen Java Basics - Anfänger-Themen 6
I Java Streams Java Basics - Anfänger-Themen 6
R Streams for runaways Java Basics - Anfänger-Themen 5
RySa Input/Output Datei kann nicht gelöscht werden, obwohl Streams geschlossen sind. Java Basics - Anfänger-Themen 2
D Input/Output streams und readLine() Java Basics - Anfänger-Themen 3
firefexx Input/Output close() bei mehreren Streams Java Basics - Anfänger-Themen 5
M Frage zu Streams Java Basics - Anfänger-Themen 9
C try finally - Streams schließen Java Basics - Anfänger-Themen 7
M Streams und Sockets Java Basics - Anfänger-Themen 3
M file löschen, streams evtl noch offen Java Basics - Anfänger-Themen 7
G Character-orientierte File-Streams mit der Klasse FileReader Java Basics - Anfänger-Themen 5
S Piped Streams / Threads Java Basics - Anfänger-Themen 6
H Frage zu Byte-Streams Java Basics - Anfänger-Themen 2
P Streams mit Sockets Java Basics - Anfänger-Themen 7
V Performance Lesen und Schreiben aus/in Streams Java Basics - Anfänger-Themen 4
C RandomAccessFile vs. Streams Java Basics - Anfänger-Themen 5
M Probleme mit den Streams Java Basics - Anfänger-Themen 2
G streams schließen Java Basics - Anfänger-Themen 2
P Fragen zu STreams Java Basics - Anfänger-Themen 5
M Streams Java Basics - Anfänger-Themen 4
H Streams etc. erster Versuch Zeilen aus einer Datei zu lesen Java Basics - Anfänger-Themen 6
? Streams Java Basics - Anfänger-Themen 2
R RandomAccessFile mit anderen Streams verbinden Java Basics - Anfänger-Themen 5
G Rekursionsaufgabe mit Streams Java Basics - Anfänger-Themen 5
J Problem mit Streams Java Basics - Anfänger-Themen 15
L Streams und Reader/Writer Java Basics - Anfänger-Themen 8
K Frage zu SdtOut streams bzw. Socket Programmierung Java Basics - Anfänger-Themen 3
M Streams, read and write Java Basics - Anfänger-Themen 2
M Streams Java Basics - Anfänger-Themen 2
B Streams wollen scheinbar nicht schließen Java Basics - Anfänger-Themen 6
S Umwandlung eines Character-Streams in ein Image Java Basics - Anfänger-Themen 17
E Probleme mit Streams Java Basics - Anfänger-Themen 3
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben