DataNputStream
DataNputStream ist ein Dateneingabestream. Es erbt von filterInputStream.
DataNputStream wird verwendet, um andere Eingabestreams zu dekorieren, mit denen "Anwendungen grundlegende Java-Datentypen aus dem zugrunde liegenden Eingabestream in maschinell unabhängiger Weise lesen können". Anwendungen können DataOutputStream verwenden, um Daten zu schreiben, die von DataNputStream gelesen werden.
DataNputStream -Funktionsliste:
DataNputStream (InputStream in) Final INT Read (Byte [] Buffer, int Offset, int Länge) Final INT Read (Byte [] Buffer) Final Boolean Readboolean () Final Byte ReadByte () Final char Readchar () endgültig doppelt doppeltDoulble () endgültige Float Readfloat () Final Lesful (byte) endgültig. ReadInt () Final String Readline () Final Long Readlong () Final Short Readshort () Final Static String ReadUtf (DataNput in) Final String readutf () Final INT ReadUnsignedByte () Finale int ReadUnsignedshort () endgültig int SkipBytes (Int Count)
Beispielcode:
Über die detaillierte Verwendung von API in DataNputStream:
importieren java.io.datainputstream; import java.io.dataoutputStream; import Java.io.BytearrayinputStream; Import Java.io.file; Import Java.io.inputStream; importieren java.io.io.ioio.ioio. java.io.filenotfoundException; importieren java.lang.SecurityException;/** * datainputStream und DataOutputStream -Testprogramm * * @Author Skywang */Public Class DataNputStreamTest {private statische endgültige intellig = 5; public static void main (String [] args) {// DataOutputStream testen und Daten in den Ausgabestream schreiben. testDataOutputStream (); // Testen Sie DataNputStream, um Daten aus dem obigen Ausgangsstromergebnis zu lesen. testDatainputStream (); } / *** DataOutputStream -API -Testfunktion* / private statische void testDataOutputStream () {try {file file = new File ("file.txt"); DataOutputStream out = new DataOutputStream (neuer FileOutputStream (Datei)); out.writeBoolean (wahr); out.writebyte ((byte) 0x41); out.writechar ((char) 0x4243); out.writeshort ((kurz) 0x4445); out.writeInt (0x12345678); Out.WriteLong (0x0FedCBA987654321l); out.writeUtf ("abcdefghijklmnopqrstuvwxyz yan12"); out.close (); } catch (FilenotFoundException e) {e.printstacktrace (); } catch (SecurityException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }} / ** * DataNputStream -API -Testfunktion * / private statische void testDatainputStream () {try {file file = new File ("file.txt"); DataNputStream in = new DataNputStream (neuer FileInputStream (Datei)); System.out.printf ("bytetohexString (0x8f): 0x%s/n", bytetohexstring ((byte) 0x8f)); System.out.printf ("ChartohexString (0x8fcf): 0x%S/N", ChartohexString ((char) 0x8fcf)); System.out.printf ("ReadBoolean ():%s/n", in.readboolean ()); System.out.printf ("ReadByte (): 0x%S/N", BytetohexString (in.readbyte ())); System.out.printf ("readchar (): 0x%s/n", ChartohexString (in.readchar ())); System.out.printf ("readshort (): 0x%s/n", ShortTohexString (in.readshort ())); System.out.printf ("readint (): 0x%s/n", Integer.tohexString (in.readint ())); System.out.printf ("Readlong (): 0x%S/N", Long.tohexString (in.readlong ())); System.out.printf ("Readutf ():%s/n", in.readutf ()); in.close (); } catch (FilenotFoundException e) {e.printstacktrace (); } catch (SecurityException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }} // Drucken Sie die hexadezimale Zeichenfolge, die dem byte privaten statischen String -BytetohexString (Byte Val) {return Integer.tohexString (Val & 0xff) entspricht; } // Drucken Sie die hexadezimale Zeichenfolge, die dem char privaten statischen String -ChartohexString (char val) {return Integer.TohexString (Val) entspricht; } // Drucken Sie die hexadezimale Zeichenfolge, die dem kurzen privaten statischen String -ShortToHexString (Short Val) {return Integer.TohexString (Val & 0xffff) entspricht; }} Auslaufergebnisse:
bytetohexString (0x8f): 0x8fchartohexString (0x8fcf): 0x8fcfreadboolean (): TrueReadByte (): 0x41Readchar (): 0x42 43Readshort (): 0x4445Readint (): 0x12345678Readlong (): 0xFEDCBA987654321Readutf (): AbcDefghijklmnopqrstuvwxyz Yan12
Ergebnisse Beschreibung:
(1) Datei anzeigen.txt Text. Die hexadezimalen Daten werden wie folgt angezeigt:
Der entsprechende Int-Wert von 001F beträgt 31. Dies bedeutet die Länge der folgenden UTF-8-Daten. Die Länge des Buchstabens "AbcdefghijklMnopqrstuvwxyz Yan12" beträgt 26, und die Länge der UTF-8-Daten, die "门" entsprechen, beträgt 3; Die Länge von "12" beträgt 2. Gesamtlänge = 26+3+2 = 31.
.
private statische String -BytetohexString (Byte Val) {return Integer.tohexString (Val & 0xff);} Überlegen Sie, warum der Code ist:
return Integer.tohexString (Val & 0xff);
Stattdessen
return Integer.tohexString (Val);
Schauen wir uns zunächst die Ausgabeergebnisse von BytetohexString ((Byte) 0x8f) an. In den oben genannten zwei Fällen.
return Integer.tohexString (Val & 0xff); Die entsprechende Ausgabe lautet "0xffffff8f"
return Integer.tohexString (Val); Die entsprechende Ausgabe ist "0x8f"
Warum passiert das?
Der Grund ist eigentlich sehr einfach, es ist das Problem, das durch "Konvertieren von Byte -Typen in INT -Typ" verursacht wird.
0x8f des Byte -Typs ist eine negative Zahl, und der entsprechende binäre ist 10001111; Beim Umwandeln eines negativen Zahl -Byte in einen int -Typ wird die signierte Transformation durchgeführt (neue Bits werden mit der Anzahl der signierten Bits gefüllt). Das Zeichenbit von 0x8f ist 1, denn beim Konvertieren in int ist es mit "1" gefüllt; Das Ergebnis nach Transformation (binär) ist 1111111111111111111111111111111111111111111111111111111111111111111111001111, und das entsprechende Hexadezimal ist 0xffffff8f.
Denn wenn wir Integer ausführen.TohexString (val);, ist die zurückgegebene 0xffffff8f.
In Integer.tohexString (Val & 0xff) entspricht es 0xffffff8f & 0xff, und das Ergebnis ist 0x8f.
(3) Geben Sie die hexadezimale Zeichenfolge zurück, die char und kurz entspricht. Der Quellcode, der "die hexadezimale Zeichenfolge zurückgeben, die dem Zeichen entspricht" zurückgeben "ist wie folgt:
private statische String -ChartohexString (char val) {return Integer.tohexString (Val);} "Geben Sie den hexadezimalen Zeichenfolgen zurück, der kurz entspricht", entspricht dem Quellcode wie folgt:
private statische String -ShortTohexString (Short Val) {return Integer.tohexString (Val & 0xffff);} Wenn Sie die beiden oben genannten Funktionen vergleichen, ist der eine "Val" und der andere "Val & 0xffff"?
Durch die Analyse von (2) stellen wir in ähnlicher Weise fest, warum "die hexadezimale Zeichenfolge, die kurz" entspricht "," Val & 0xffff "ausführen soll.
Warum müssen Sie jedoch "Val" ausführen, wenn Sie "die hexadezimale Zeichenfolge zurückgeben, die dem Zeichen entspricht". Der Grund ist auch sehr einfach. In Java ist CHAR ein nicht signierter Typ, der zwei Bytes berücksichtigt. CHAR in INT -Typ konvertieren, unsignierte Transformation durchführt und alle mit 0 besiedelt werden.
DataOutputStream
DataOutputStream ist der Datenausgangsstrom. Es erbt von filteroutputStream.
DataOutputStream wird verwendet, um andere Ausgabestreams zu dekorieren, indem DataOutputStream- und DataNputStream-Eingabestreams verwendet werden, "das Ermöglichung von Anwendungen, grundlegende Java-Datentypen aus dem zugrunde liegenden Eingabestream auf maschinenunabhängige Weise zu lesen und zu schreiben."
Beispielcode zur detaillierten Verwendung von API in DataOutStream:
importieren java.io.datainputstream; import java.io.dataoutputStream; import Java.io.BytearrayinputStream; Import Java.io.file; Import Java.io.inputStream; importieren java.io.io.ioio.ioio. java.io.filenotfoundException; importieren java.lang.SecurityException;/** * datainputStream und DataOutputStream -Testprogramm * * @Author Skywang */Public Class DataNputStreamTest {private statische endgültige intellig = 5; public static void main (String [] args) {// DataOutputStream testen und Daten in den Ausgabestream schreiben. testDataOutputStream (); // Testen Sie DataNputStream, um Daten aus dem obigen Ausgangsstromergebnis zu lesen. testDatainputStream (); } / *** DataOutputStream -API -Testfunktion* / private statische void testDataOutputStream () {try {file file = new File ("file.txt"); DataOutputStream out = new DataOutputStream (neuer FileOutputStream (Datei)); out.writeBoolean (wahr); out.writebyte ((byte) 0x41); out.writechar ((char) 0x4243); out.writeshort ((kurz) 0x4445); out.writeInt (0x12345678); Out.WriteLong (0x0FedCBA987654321l); out.writeUtf ("abcdefghijklmnopqrstuvwxyz yan12"); out.close (); } catch (FilenotFoundException e) {e.printstacktrace (); } catch (SecurityException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }} / ** * DataNputStream -API -Testfunktion * / private statische void testDatainputStream () {try {file file = new File ("file.txt"); DataNputStream in = new DataNputStream (neuer FileInputStream (Datei)); System.out.printf ("bytetohexString (0x8f): 0x%s/n", bytetohexstring ((byte) 0x8f)); System.out.printf ("ChartohexString (0x8fcf): 0x%S/N", ChartohexString ((char) 0x8fcf)); System.out.printf ("ReadBoolean ():%s/n", in.readboolean ()); System.out.printf ("ReadByte (): 0x%S/N", BytetohexString (in.readbyte ())); System.out.printf ("readchar (): 0x%s/n", ChartohexString (in.readchar ())); System.out.printf ("readshort (): 0x%s/n", ShortTohexString (in.readshort ())); System.out.printf ("readint (): 0x%s/n", Integer.tohexString (in.readint ())); System.out.printf ("Readlong (): 0x%S/N", Long.tohexString (in.readlong ())); System.out.printf ("Readutf ():%s/n", in.readutf ()); in.close (); } catch (FilenotFoundException e) {e.printstacktrace (); } catch (SecurityException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }} // Drucken Sie die hexadezimale Zeichenfolge, die dem byte privaten statischen String -BytetohexString (Byte Val) {return Integer.tohexString (Val & 0xff) entspricht; } // Drucken Sie die hexadezimale Zeichenfolge, die dem char privaten statischen String -ChartohexString (char val) {return Integer.TohexString (Val) entspricht; } // Drucken Sie die hexadezimale Zeichenfolge, die dem kurzen privaten statischen String -ShortToHexString (Short Val) {return Integer.TohexString (Val & 0xffff) entspricht; }} Auslaufergebnisse:
bytetohexString (0x8f): 0x8fchartohexString (0x8fcf): 0x8fcfreadboolean (): TrueReadByte (): 0x41Readchar (): 0x42 43Readshort (): 0x4445Readint (): 0x12345678Readlong (): 0xFEDCBA987654321Readutf (): AbcDefghijklmnopqrstuvwxyz Yan12