DataAnputStream
DataInputStream es un flujo de entrada de datos. Hereda de FilterInputStream.
DataInputStream se utiliza para decorar otras secuencias de entrada, que "permite que las aplicaciones lean los tipos de datos de Java básicos de la secuencia de entrada subyacente de una manera independiente de la máquina". Las aplicaciones pueden usar DataOutputStream para escribir datos leídos por DataInputStream.
Lista de funciones DataInPutStream:
DataInputStream (inputStream in) final int (byte [] buffer, int offset, int long) int int (byte [] buffer) final boolean readBoolean () final byte readbyte () char readchar () final double readDouble () final float readfloat () final lecoid (byte [] dst final void void lEer readInt () Final String Readline () final Long Longlong () final corta ReadShort () final de cadena estática final Readutf (DataInput in) Final String ReadUtf () intent ReadUnsignedByte () Final int ReadUnsignedShort () Final Int Skipbytes (int Count)
Código de muestra:
Acerca del uso detallado de API en DataInputStream:
import 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.io.fileOutstream; import java.io.ioxception; java.io.filenotfoundException; import java.lang.securityException;/** * Programa de prueba DataInStream y DatautPutStream * * @author Skywang */public class dataInputStreamTest {private static static inten = 5; public static void main (string [] args) {// prueba dataOutputStream y escriba datos en la transmisión de salida. testDataOutputStream (); // Prueba DataintStream para leer los datos del resultado de la transmisión de salida anterior. testDataInputStream (); } / *** DatautputStream API Test Function* / private static void testDataOutputStream () {try {file file = new File ("File.txt"); DataOutputStream out = new DataOutputStream (nuevo FileOutputStream (File)); out.writeboolean (verdadero); out.writyte ((byte) 0x41); out.writechar ((char) 0x4243); out.writshort (((corto) 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 (); }} / ** * Función de prueba API de DataInputStream * / private static void testDatainputStream () {try {file file = new File ("File.txt"); DataInputStream in = new DataInputStream (new FileInputStream (File)); 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 ()); cercar(); } catch (FileNotFoundException e) {E.PrintStackTrace (); } catch (SecurityException e) {E.PrintStackTrace (); } catch (ioException e) {E.PrintStackTrace (); }} // imprima la cadena hexadecimal correspondiente a la cadena estática de byte byte bytetohexstring (byte val) {return integer.tohexstring (val & 0xff); } // Imprima la cadena hexadecimal correspondiente a la cadena estática privada ChartohexString (char val) {return integer.tohexString (val); } // Imprima la cadena hexadecimal correspondiente a la cadena estática privada corta ShortToxString (corta val) {return integer.toHexString (val & 0xffff); }} Resultados de ejecución:
bytetohexstring (0x8f): 0x8fchartohexstring (0x8fcf): 0x8fcfreadboolean (): trueReadByte (): 0x41readchar (): 0x42 43ReadShort (): 0x44445ReadInt (): 0x12345678readlong (): 0xfedcba987654321readutf (): abcdefghijklmnopqrstuvwxyz Yan12
Descripción de los resultados:
(1) Ver archivo File.txt. Los datos hexadecimales se muestran de la siguiente manera:
El valor INT correspondiente de 001F es 31. Significa la longitud de los datos UTF-8 que siguen. La longitud de la letra "abcdefghijklmnopqrstuvwxyz yan12" es 26, y la longitud de los datos UTF-8 correspondientes a "门" es 3; La longitud de "12" es 2. Longitud total = 26+3+2 = 31.
(2) Devolver el código fuente de cadena hexadecimal correspondiente al byte es el siguiente:
cadena estática privada bytetoHexString (byte val) {return integer.tohexstring (val & 0xff);} Piense por qué el código es:
return integer.tohexString (val & 0xff);
En cambio
return integer.tohexString (val);
Primero veamos los resultados de salida de Bytetohexstring ((byte) 0x8f); En los dos casos anteriores.
return integer.tohexString (val & 0xff); La salida correspondiente es "0xffffff8f"
return integer.tohexString (val); La salida correspondiente es "0x8f"
¿Por qué está sucediendo esto?
La razón es en realidad muy simple, es el problema causado por "convertir el tipo de byte a tipo int".
0x8f del tipo de byte es un número negativo, y su binario correspondiente es 10001111; Al convertir un byte de número negativo en un tipo int, se realiza la transformación firmada (se llenan nuevos bits con el número de bits firmados). El bit de signo de 0x8f es 1, porque al convertirlo en int, se llena con "1"; El resultado después de la transformación (binario) es 111111111111111111111111111111111111111111111111111111111111111110011111111111111111111111111111111111111111111111111111, y el correspondiente.
Porque cuando ejecutamos Integer.toHexString (val);, el returned es 0xffffff8f.
En Integer.ToHexString (val & 0xff), es equivalente a 0xffffff8f & 0xff, y el resultado es 0x8f.
(3) Devuelva la cadena hexadecimal correspondiente a Char y corta. El código fuente correspondiente a "devolver la cadena hexadecimal correspondiente a Char" es el siguiente:
Cadena estática privada Chartohexstring (char val) {return integer.tohexstring (val);} "Devuelve la cadena hexadecimal correspondiente al corto" corresponde al código fuente de la siguiente manera:
cadena estática privada ShorttoHexString (corta val) {return integer.tohexString (val & 0xffff);} Comparando las dos funciones anteriores, ¿por qué una es "Val" y la otra es "Val & 0xffff"?
A través del análisis de (2), deducimos de manera similar por qué "devolver la cadena hexadecimal correspondiente al corto" es ejecutar "Val & 0xffff".
Sin embargo, ¿por qué necesita ejecutar "Val" si "devuelve la cadena hexadecimal correspondiente a Char"? La razón también es muy simple. En Java, Char es un tipo sin firmar, que representa dos bytes. Convertir Char al tipo int, realiza una transformación sin firmar y agrega todo poblado con 0.
DataOutputStream
DataOutputStream es el flujo de salida de datos. Hereda de FilterOutputStream.
DataOutputStream se utiliza para decorar otras secuencias de salida, utilizando DataOutputStream y las secuencias de entrada DataRenPutStream, "permitiendo que las aplicaciones lean y escriban los tipos básicos de datos Java desde la secuencia de entrada subyacente de una manera independiente de la máquina".
Código de muestra para el uso detallado de API en DataOutStream:
import 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.io.fileOutstream; import java.io.ioxception; java.io.filenotfoundException; import java.lang.securityException;/** * Programa de prueba DataInStream y DatautPutStream * * @author Skywang */public class dataInputStreamTest {private static static inten = 5; public static void main (string [] args) {// prueba dataOutputStream y escriba datos en la transmisión de salida. testDataOutputStream (); // Prueba DataintStream para leer los datos del resultado de la transmisión de salida anterior. testDataInputStream (); } / *** DatautputStream API Test Function* / private static void testDataOutputStream () {try {file file = new File ("File.txt"); DataOutputStream out = new DataOutputStream (nuevo FileOutputStream (File)); out.writeboolean (verdadero); out.writyte ((byte) 0x41); out.writechar ((char) 0x4243); out.writshort (((corto) 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 (); }} / ** * Función de prueba API de DataInputStream * / private static void testDatainputStream () {try {file file = new File ("File.txt"); DataInputStream in = new DataInputStream (new FileInputStream (File)); 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 ()); cercar(); } catch (FileNotFoundException e) {E.PrintStackTrace (); } catch (SecurityException e) {E.PrintStackTrace (); } catch (ioException e) {E.PrintStackTrace (); }} // imprima la cadena hexadecimal correspondiente a la cadena estática de byte byte bytetohexstring (byte val) {return integer.tohexstring (val & 0xff); } // Imprima la cadena hexadecimal correspondiente a la cadena estática privada ChartohexString (char val) {return integer.tohexString (val); } // Imprima la cadena hexadecimal correspondiente a la cadena estática privada corta ShortToxString (corta val) {return integer.toHexString (val & 0xffff); }} Resultados de ejecución:
bytetohexstring (0x8f): 0x8fchartohexstring (0x8fcf): 0x8fcfreadboolean (): trueReadByte (): 0x41readchar (): 0x42 43ReadShort (): 0x44445ReadInt (): 0x12345678readlong (): 0xfedcba987654321readutf (): abcdefghijklmnopqrstuvwxyz Yan12