Datainputstream
DatAnputStream est un flux d'entrée de données. Il hérite de FilterInputStream.
DatainputStream est utilisé pour décorer d'autres flux d'entrée, qui "permet aux applications de lire les types de données Java de base à partir du flux d'entrée sous-jacent de manière indépendante de la machine". Les applications peuvent utiliser DataOutputStream pour rédiger des données lues par DatainputStream.
Liste des fonctions de DatAnputStream:
DatainputStream (InputStream in) final int lien (octet [] tampon, into offset, int le long) final int lien (byte [] tampon) final booléen readboolean () byte final readbyte () Char final readchar () final double readdouble () final float readfloat () final void lidely (octet [] dst) final void Relity readInt () Final String readLine () final long readLong () final short ReadShort () final static static readUtf (dataNput in) final string readUtf () final int ReadunSignedByte () final int readunSignedShort () final int skipbytes (int count)
Exemple de code:
À propos de l'utilisation détaillée de l'API dans DatainputStream:
Importer java.io.datainputStream; import java.io.dataoutputStream; import java.io.bytearrayinputStream; import java.io.file; import java.io.inputstream; import java.io.fileinputStream; import java.ile java.io.filenotfoundException; import java.lang.securityException; / ** * datainputStream et dataoutputStream Test Program * * @author skywang * / classe publique DatainputStreamTest {private static final int len = 5; public static void main (String [] args) {// tester dataOutputStream et écrire des données dans le flux de sortie. TestDataOutputStream (); // Testez DataRainputStream pour lire les données du résultat du flux de sortie ci-dessus. TestDatainputStream (); } / ** * Fonction de test de l'API de DataOutStStream * / private static void testDataOutputStream () {try {file file = new File ("file.txt"); DataOutputStream out = new DataOutputStream (new FileOutputStream (fichier)); out.writeboolean (true); out.writeByte ((octet) 0x41); out.writechar ((char) 0x4243); out.writeShort ((court) 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 (); }} / ** * Fonction de test de l'API de DatAnputStream * / private static void testDatainputStream () {try {file file = new File ("file.txt"); DatAnputStream dans = new DatAnputStream (new FileInputStream (fichier)); System.out.printf ("ByteToHExString (0x8f): 0x% s / n", bytetoHExString ((octet) 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", byToHExString (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 ()); joindre(); } catch (filenotFoundException e) {e.printStackTrace (); } catch (SecurityException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); }} // Imprime la chaîne hexadécimale correspondant à la chaîne statique privée byte byteToHExString (byte val) {return Integer.tohexString (val & 0xff); } // Imprime la chaîne hexadécimale correspondant à la chaîne statique privée char chartohexString (char Val) {return Integer.tohexString (Val); } // Imprime la chaîne hexadécimale correspondant à une chaîne statique privée courte shorttohexstring (court val) {return Integer.tohexString (val & 0xffff); }} Résultats en cours:
byToHExString (0x8f): 0x8fChartoHExString (0x8fcf): 0x8fcfreadboolean (): trueeReadByte (): 0x41Readchar (): 0x42 43Readshort (): 0x4445ReadInt (): 0x12345678Readlong (): 0xfedcba987654321ReadUtf (): ABCDEFGHIJKLMNOPQRSTUVWXYZZ Yan12
Description des résultats:
(1) Affichage du texte File.txt. Les données hexadécimales sont affichées comme suit:
La valeur int correspondante de 001F est 31. Cela signifie la longueur des données UTF-8 qui suit. La longueur de la lettre "ABCDEFGHIJKLMNOPQRSTUVWXYZ YAN12" est 26, et la longueur des données UTF-8 correspondant à "门" est 3; La longueur de "12" est 2. Longueur totale = 26 + 3 + 2 = 31.
(2) Retour le code source de chaîne hexadécimale correspondant à l'octet est le suivant:
String statique privé ByteToHExString (Byte Val) {return Integer.tohexString (Val & 0xff);} Réfléchissez à la raison pour laquelle le code est:
return Integer.tohexString (val & 0xff);
Plutôt
return Integer.tohexString (Val);
Examinons d'abord les résultats de sortie de ByteToHExString ((octet) 0x8f); Dans les deux cas ci-dessus.
return Integer.tohexString (val & 0xff); La sortie correspondante est "0xffffff8f"
return Integer.tohexString (Val); La sortie correspondante est "0x8f"
Pourquoi cela se produit-il?
La raison est en fait très simple, c'est le problème causé par le "type d'octet de conversion en type int".
0x8f du type d'octet est un nombre négatif, et son binaire correspondant est 10001111; Lors de la conversion d'un octet de nombre négatif en un type int, une transformation signée est effectuée (les nouveaux bits sont remplis du nombre de bits signés). Le bit de signe de 0x8f est 1, car lors de la conversion en int, il est rempli de "1"; Le résultat après transformation (binaire) est 1111111111111111111111111111111111111111111111110011111, et l'hexadécimal correspondant est 0xffffff8f.
Parce que lorsque nous exécutons Integer.tohexString (Val);, le retourné est 0xffffff8f.
Dans Integer.tohexString (val & 0xff), il est équivalent à 0xffffff8f & 0xff, et le résultat est 0x8f.
(3) Retournez la chaîne hexadécimale correspondant au char et court. Le code source correspondant à "Retour la chaîne hexadécimale correspondant à Char" est la suivante:
chaîne statique privée chartOHExString (char Val) {return Integer.tohexString (Val);} "Retour la chaîne hexadécimale correspondant à court" correspond au code source comme suit:
chaîne statique privée shorttohexstring (court val) {return Integer.tohexString (val & 0xffff);} En comparant les deux fonctions ci-dessus, pourquoi l'une est "Val" et l'autre est "Val & 0xffff"?
Grâce à l'analyse de (2), nous déduisons également pourquoi "Retour la chaîne hexadécimale correspondant à Short" est d'exécuter "Val & 0xffff".
Cependant, pourquoi avez-vous besoin d'exécuter "Val" si vous "renvoie la chaîne hexadécimale correspondant à Char". La raison est également très simple. En Java, Char est un type non signé, représentant deux octets. Convertir Char en type int, effectue une transformation non signée et ajoute tous peuplés avec 0.
DataOutputStream
DataOutputStream est le flux de sortie de données. Il hérite de FilterOutputStream.
DataOutputStream est utilisé pour décorer d'autres flux de sortie, à l'aide de DataOutStream et DatainputStream INPUT Streams, "permettant aux applications de lire et d'écrire des types de données Java de base à partir du flux d'entrée sous-jacent de manière indépendante de la machine."
Exemple de code pour une utilisation détaillée de l'API dans DataoutStream:
Importer java.io.datainputStream; import java.io.dataoutputStream; import java.io.bytearrayinputStream; import java.io.file; import java.io.inputstream; import java.io.fileinputStream; import java.ile java.io.filenotfoundException; import java.lang.securityException; / ** * datainputStream et dataoutputStream Test Program * * @author skywang * / classe publique DatainputStreamTest {private static final int len = 5; public static void main (String [] args) {// tester dataOutputStream et écrire des données dans le flux de sortie. TestDataOutputStream (); // Testez DataRainputStream pour lire les données du résultat du flux de sortie ci-dessus. TestDatainputStream (); } / ** * Fonction de test de l'API de DataOutStStream * / private static void testDataOutputStream () {try {file file = new File ("file.txt"); DataOutputStream out = new DataOutputStream (new FileOutputStream (fichier)); out.writeboolean (true); out.writeByte ((octet) 0x41); out.writechar ((char) 0x4243); out.writeShort ((court) 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 (); }} / ** * Fonction de test de l'API de DatAnputStream * / private static void testDatainputStream () {try {file file = new File ("file.txt"); DatAnputStream dans = new DatAnputStream (new FileInputStream (fichier)); System.out.printf ("ByteToHExString (0x8f): 0x% s / n", bytetoHExString ((octet) 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", byToHExString (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 ()); joindre(); } catch (filenotFoundException e) {e.printStackTrace (); } catch (SecurityException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); }} // Imprime la chaîne hexadécimale correspondant à la chaîne statique privée byte byteToHExString (byte val) {return Integer.tohexString (val & 0xff); } // Imprime la chaîne hexadécimale correspondant à la chaîne statique privée char chartohexString (char Val) {return Integer.tohexString (Val); } // Imprime la chaîne hexadécimale correspondant à une chaîne statique privée courte shorttohexstring (court val) {return Integer.tohexString (val & 0xffff); }} Résultats en cours:
byToHExString (0x8f): 0x8fChartoHExString (0x8fcf): 0x8fcfreadboolean (): trueeReadByte (): 0x41Readchar (): 0x42 43Readshort (): 0x4445ReadInt (): 0x12345678Readlong (): 0xfedcba987654321ReadUtf (): ABCDEFGHIJKLMNOPQRSTUVWXYZZ Yan12