Datenbetriebfluss
Im IO-Paket werden zwei plattformunabhängige Datenbetriebsstreams bereitgestellt:
DataNputStream
DataOutputStream
Normalerweise gibt der Datenausgangsstrom die Daten in einem bestimmten Format aus und lesen die Daten dann in einem bestimmten Format über den Dateneingangsstrom.
Die DataOutputStream -Schnittstelle definiert eine Reihe von Writexxxx () -Operationen, die Daten von verschiedenen Datentypen schreiben können.
Beispiel: Schreiben und lesen Sie Daten mit Datenmanipulationsströmen
importieren java.io.dataoutputStream; Import Java.io.file; importieren java.io.fileoutputStream; public class DataOutputStreamDemo {public static void main (String args []) löst Ausnahme aus {// alle Ausnahmen werfen DataOutputStream dos = null; // Die Datenausgabe -Stream -Objektdatei f = Neue Datei deklarieren ("D:" + file.separator + "order.txt"); // Die Datei speichern Pfad dos = new DataOutputStream (neuer FileOutputStream (f)); // Instantierte Datenausgabe -Stream -Objekt -String -Namen [] = {"Shirt", "Handschuh", "Schal"}; // Produktname Float Preise [] = {98,3f, 30,3f, 50,5f}; // Produktpreis int nums [] = {3,2,1}; // Produktmenge für (int i = 0; i <names.length; i ++) {// Schleifenausgabe dos.writechars (Namen [i]); // String dos.writechar ('/t') schreiben; // Schreiben Sie Separator dos.writeFloat (Preise [i]); // Preis schreiben dos.writechar ('/t'); // Ablimiter dos.writeInt (nums [i]); // Quantität schreiben dos.writechar ('/n'); // newline} dos.close (); // Ausgabestream}} schließen; importieren java.io.datainputstream; Import Java.io.file; import Java.io.FileInputStream; öffentliche Klasse DataNputStreamDemo {public static void main (String args []) löst Ausnahme aus {// alle Ausnahmen werfen DataNputStream dis = null; // Die Dateneingangs -Stream -Objektdatei f = Neue Datei deklarieren ("D:" + file.separator + "order.txt"); // die Speichernspfad der Datei dis = new DataNputStream (neuer FileInputStream (f)); // den Dateneingangsstrom -Objekt -String -String -Name = null instanziieren; // Namensschwimmerpreis = 0,0F erhalten; // Preis int num = 0 erhalten; // Quantity char temp [] = null erhalten; // Produktname int len = 0 erhalten; // die Anzahl der Lesedaten speichern char c = 0; // '/u0000' try {while (true) {temp = new char [200]; // Open Space Len = 0; while ((c = dis.readchar ())! = '/t') {// Inhalts temp [len] = c; Len ++; // LESEN Länge plus 1} name = new String (temp, 0, len); // Ändern Sie das Zeichenarray in String price = dis.readfloat (); // Preis dis.readchar () lesen; // read /t num = dis.readint (); // Int dis.readchar () lesen; // Int dis.readchar () lesen; // read/n system.out.printf ("Name: %s; Preis: %5.2f; Menge: %d/n", Name, Preis, num); }} catch (Ausnahme e) {} dis.close (); }};Objektserialisierung
Objektserialisierung ist eine Methode, um Objekte in binäre Datenströme zu verwandeln. Durch die Objekt -Serialisierung kann die Übertragung oder Speicherung von Objekten leicht realisiert werden.
Wenn eine Klasse die Initialisierung unterstützen möchte, muss die Klasse die Schnittstelle java.io.serilisierbar implementieren. Die Schnittstelle ist wie folgt definiert:
publicInterFaceserilizable {}
In dieser Schnittstelle gibt es keine Methode, daher gehört diese Klasse zu einer Etikettenschnittstelle, was darauf hinweist, dass die Klasse, die die Schnittstelle implementiert, einige Funktionen aufweist.
1. Serialisierung und Deserialisierung von Objekten
2.Serialversionuid
Eine serialversionuidische Konstante wird im Serialisierungsvorgang eingeführt. Diese Konstante kann verwendet werden, um die Konsistenz der Version zu überprüfen. Bei der Deserialisierung vergleichen das JVM die Serialversionuid im im Byte -Stream übergebenen Serialversionuid der lokalen entsprechenden Klasse. Wenn dasselbe als konsistent angesehen wird, kann es deserialisiert werden, ansonsten tritt eine Ausnahme mit inkonsistenten Serialisierungsversionen auf.
importieren java.io.serializable; Person der öffentlichen Klasse implementsserializable {private Zeichenfolge Name; // das Namensattribut deklarieren, aber dieses Attribut ist nicht serialisiertes privates int -Alter; // Das Altersattribut öffentlicherPerson (String -Name, int age) {// Inhalt festlegen, indem er this.name = name erstellt; this.age = Alter; } publicString toString () {// Überschreibe die Methode toString () zur Rückgabe "Name:" + this.name + "; Alter:" + this.age; }}; 3.. Objektausgabe Stream: ObjectOutputStream
Wenn ein Objekt ausgeben möchte, muss es die ObjektOutputStream -Klasse verwenden, die wie folgt definiert ist
Wenn ein Attribut in einem Objekt nicht serialisiert werden möchte, kann es mit dem transienten Schlüsselwort deklariert werden.
Importjava.io.file; Importjava.io.FileOutputStream; Importjava.io.outputStream; Importjava.io.objectoutputStream; publicClass serDemo01 {public static void main (String args []) throwSexception {Datei f = neue Datei ("D:" + file.separator + "test.txt"); // Definieren Sie den Save Path ObjectOutputStream OOS = NULL; // Deklarieren Sie den Output -Stream -Ausgangsstrom -Ausgangsstream für Objekte = newFileOutputStream (f); // Dateiausgabe Stream OOS = new ObjectOutputStream (out); OOS.WriteObject (neue Person ("Zhang San", 30)); // das Objekt speichern oos.close (); // Schließen } };4. Objekteingangsstream: ObjectInputStream
Importjava.io.file; Importjava.io.FileInputStream; Importjava.io.inputStream; Importjava.io.objectInputStream; publicClass serDemo02 {public static void main (String args []) throwSexception {Datei f = neue Datei ("D:" + file.separator + "test.txt"); // Definieren Sie den Save Path ObjectInputStream ois = null; // deklarieren Sie den Objekteingangsstrom inputStream input = newFileInputStream (f); // Dateieingabestream OIS = new ObjectInputStream (Eingabe); // Objekt Objekt Objekt Object Obj = Ois.ReadObject (); // Objekt lesen ois.close (); // Close System.out.println (OBJ); }};6. Serialisieren Sie eine Gruppe von Objekten
Beim Ausgabe eines Objekts wird nur ein Objektausgaberoffin (writeObject (ObjectObJ)) bereitgestellt, und es werden keine mehrere Objekte bereitgestellt. Wenn Sie jetzt mehrere Objekte serialisieren möchten, können Sie das Objektarray verwenden, um es zu vervollständigen. Da es sich bei dem Array um einen Referenzdatentyp handelt, können Sie den Objekttyp direkt verwenden, um ihn zu empfangen.
Importjava.io.file; Importjava.io.ioException; Importjava.io.FileOutputStream; Importjava.io.outputStream; Importjava.io.objectoutputStream; Importjava.io.FileInputStream; Importjava.io.inputStream; Importjava.io.objectInputStream; publicClass serdemo05 {public static void main (String args []) throwSexception {Person per [] = {New Person ("Zhang san", 30), Newperson ("Li si", 31), New Person ("Wang Wu", 32)}; Ser (per); Objekt o [] = (Objekt []) dser (); für (int i = 0; i <o.Length; i ++) {Person p = (Person) o [i]; System.out.println (p); }} public static void ser (Objekt obj []) throwSexception {Datei f = neue Datei ("d:" + file.separator + "test.txt"); // Definieren Sie den Save Path ObjectOutputStream OOS = NULL; // Deklarieren Sie den Output -Stream -Stream -Stream für Objektausgaben. // Dateiausgabe Stream OOS = new ObjectOutputStream (out); OOS.WriteObject (OBJ); // Objekt speichern oos.close (); // schließen} öffentliches statisches Objekt [] dser () löst Ausnahme aus {Datei f = neue Datei ("D:" + file.separator + "test.txt"); // Definieren Sie den Save Path ObjectInputStream ois = null; // deklarieren Sie den Objekteingangsstrom inputStream input = newFileInputStream (f); // Dateieingabestream OIS = new ObjectInputStream (Eingabe); // das Objekt -Eingabe -Stream -Objekt Obj [] = (Objekt []) ois.ReadObject () instanziieren; // das Objekt lies ois.close (); // Return OBJ schließen; }};Die Anzahl der Objekte, die ein Array speichern kann, ist begrenzt, sodass Sie Klassensätze verwenden können, um Serialisierungsvorgänge auszuführen.
Druckstrom
Um die Datenmenge während der Übertragung zu reduzieren, werden auch komprimierte Streams in Java bereitgestellt, und Dateien oder Ordner können in Reißverschluss, Glas, Gzip und andere Formate komprimiert werden.
Dieser Stream wird weniger verwendet, also nur eine kurze Einführung.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über Java IO -Datenbetriebfluss, Objektserialisierung und komprimierte Stream -Codeanalyse. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!