DatainputStream
DatainputStream é um fluxo de entrada de dados. Herda do filtroinputStream.
O DatainputStream é usado para decorar outros fluxos de entrada, que "permitem que os aplicativos leiam os tipos básicos de dados Java a partir do fluxo de entrada subjacente de maneira independente da máquina". Os aplicativos podem usar o DataOutputStream para gravar dados lidos por DatainputStream.
Lista de funções DatainputStream:
DataInputStream(InputStream in)final int read(byte[] buffer, int offset, int length)final int read(byte[] buffer)final boolean readBoolean()final byte readByte()final char readChar()final double readDouble()final float readFloat()final void readFully(byte[] dst)final void readFully(byte[] dst, int offset, int bytecount) Final int readInt () final string readLine () final long readlong () final short readshort () final estático string readutf (datainput in) final string readutf () final readunSignedByte () final readunSignedshort () final int skipbytes (int contagem)
Código de exemplo:
Sobre o uso detalhado da API no DatainputStream:
importar java.io.datainputStream; importar java.io.dataoutputStream; importar java.io.bytearrayinputStream; importar java.io.file; importar java.io.InMeExtStream; importestream; importeream; importtupream; import java.io.fileInputream; importar java.io.fileOutstream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importtUtream; importtUtream; importtusen; java.io.filenotfoundException; importar java.lang.securityException;/** * DatainputStream e DataOutputStream Test Program * * @Author Skywang */classe pública DataAinTreamTest {private static final int len = 5; public static void main (string [] args) {// teste dataOutputStream e grave dados no fluxo de saída. testDataOutputStream (); // Teste DataInputStream para ler os dados do resultado do fluxo de saída acima. testDatainputStream (); } / *** DataOutputStream Função de teste da API* / private estático void testDataOutputStream () {try {arquivo file = new File ("file.txt"); DataOutputStream Out = new DataOutputStream (new FileOutputStream (File)); out.WriteBoolean (verdadeiro); out.WriteByte ((byte) 0x41); out.writechar ((char) 0x4243); out.writeShort ((curto) 0x4445); out.WriteInt (0x12345678); out.Writelong (0x0FEDCBA987654321L); out.WriteUtf ("abcdefghijklmnopqrststuvwxyz yan12"); out.Close (); } catch (filenotfoundException e) {e.printStackTrace (); } Catch (SegurançaException e) {E.PrintStackTrace (); } catch (ioexception e) {e.printStackTrace (); }} / ** * Função de teste da API DatainputStream * / private estático void testDatainputStream () {try {file file = new File ("file.txt"); DatainputStream in = new DatainputStream (new FileInputStream (arquivo)); 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", shortHexString (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 (SegurançaException e) {E.PrintStackTrace (); } catch (ioexception e) {e.printStackTrace (); }} // Imprima a sequência hexadecimal correspondente a string estática privada byte bytetoHexString (byte val) {return integer.tohexstring (val & 0xff); } // Imprima a sequência hexadecimal correspondente a char estática privada String ChartoHexString (char val) {return integer.tohexstring (val); } // Imprima a sequência hexadecimal correspondente a string estática privada curta ShortToHexString (Val curto) {return integer.tohexstring (val & 0xffff); }} Resultados em execução:
bytetoHexString (0x8f): 0x8fChartoHexString (0x8fcf): 0x8fcfreadBoolean (): truereadByte (): 0x41Readchar (): 0x42 43readshort (): 0x4445readInT (): 0x12345678readlong (): 0xfedCBA987654321readUtf (): abcdefghijklmnopqrstwxyz Yan12
Resultados Descrição:
(1) View file.txt text. Os dados hexadecimais são exibidos da seguinte forma:
O valor int correspondente de 001f é 31. Significa o comprimento dos dados UTF-8 a seguir. O comprimento da letra "abcdefghijklmnopqrstuvwxyz yan12" é 26, e o comprimento dos dados UTF-8 correspondentes a "门" é 3; O comprimento de "12" é 2. Comprimento total = 26+3+2 = 31.
(2) Retorne o código -fonte da string hexadecimal correspondente ao byte é o seguinte:
String estática privada bytetoHexString (byte val) {return integer.tohexstring (val & 0xff);} Pense sobre por que o código é:
return integer.tohexstring (val & 0xff);
Em vez de
return integer.tohexstring (val);
Vamos primeiro olhar para os resultados de saída do bytetoHexString ((byte) 0x8f); Nos dois casos acima.
return integer.tohexstring (val & 0xff); A saída correspondente é "0xffffff8f"
return integer.tohexstring (val); A saída correspondente é "0x8f"
Por que isso está acontecendo?
O motivo é realmente muito simples, é o problema causado pela "conversão do tipo de byte em tipo int".
0x8f do tipo de byte é um número negativo e seu binário correspondente é 10001111; Ao converter um byte de número negativo em um tipo int, a transformação assinada é realizada (novos bits são preenchidos com o número de bits assinados). O bit de sinal de 0x8f é 1, porque ao convertê -lo em int, é preenchido com "1"; O resultado após a transformação (binário) é 1111111111111111111111111111111111111111111111111111111111100111111 e o hexadecimal correspondente é 0xfffffff8f.
Porque quando executamos o número inteiro.ToHexString (VAL);, o retorno é 0xffffff8f.
Em Integer.ToHexString (Val & 0XFF), é equivalente a 0xffffff8f e 0xff, e o resultado é 0x8f.
(3) Retorne a sequência hexadecimal correspondente a char e curta. O código -fonte correspondente a "Retornar a sequência hexadecimal correspondente a char" é a seguinte:
Private Static String ChartoHexString (Char Val) {Return Integer.ToHexString (Val);} "Retorne a sequência hexadecimal correspondente a curta" corresponde ao código -fonte da seguinte maneira:
String estática privada ShorttoHexString (curto val) {return integer.tohexstring (val & 0xffff);} Comparando as duas funções acima, por que uma é "Val" e a outra é "Val & 0xffff"?
Através da análise de (2), deduzimos da mesma forma por que "retornar a sequência hexadecimal correspondente a curta" é executar "val & 0xffff".
No entanto, por que você precisa executar "Val" se você "retorna a sequência hexadecimal correspondente a char". O motivo também é muito simples. Em Java, Char é um tipo não assinado, representando dois bytes. Converta char em tipo int, executa transformação não assinada e adiciona tudo povoado com 0.
DataOutputStream
DataOutputStream é o fluxo de saída de dados. Herda do filterOutputStream.
O DataOutputStream é usado para decorar outros fluxos de saída, usando os fluxos de entrada DataOutputStream e DataAinputStream, "permitindo que os aplicativos leiam e escrevam tipos básicos de dados Java a partir do fluxo de entrada subjacente de maneira independente da máquina".
Código de exemplo para uso detalhado da API no DataoutStream:
importar java.io.datainputStream; importar java.io.dataoutputStream; importar java.io.bytearrayinputStream; importar java.io.file; importar java.io.InMeExtStream; importestream; importeream; importtupream; import java.io.fileInputream; importar java.io.fileOutstream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importeream; importtUtream; importtUtream; importtusen; java.io.filenotfoundException; importar java.lang.securityException;/** * DatainputStream e DataOutputStream Test Program * * @Author Skywang */classe pública DataAinTreamTest {private static final int len = 5; public static void main (string [] args) {// teste dataOutputStream e grave dados no fluxo de saída. testDataOutputStream (); // Teste DataInputStream para ler os dados do resultado do fluxo de saída acima. testDatainputStream (); } / *** DataOutputStream Função de teste da API* / private estático void testDataOutputStream () {try {arquivo file = new File ("file.txt"); DataOutputStream Out = new DataOutputStream (new FileOutputStream (File)); out.WriteBoolean (verdadeiro); out.WriteByte ((byte) 0x41); out.writechar ((char) 0x4243); out.writeShort ((curto) 0x4445); out.WriteInt (0x12345678); out.Writelong (0x0FEDCBA987654321L); out.WriteUtf ("abcdefghijklmnopqrststuvwxyz yan12"); out.Close (); } catch (filenotfoundException e) {e.printStackTrace (); } Catch (SegurançaException e) {E.PrintStackTrace (); } catch (ioexception e) {e.printStackTrace (); }} / ** * Função de teste da API DatainputStream * / private estático void testDatainputStream () {try {file file = new File ("file.txt"); DatainputStream in = new DatainputStream (new FileInputStream (arquivo)); 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", shortHexString (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 (SegurançaException e) {E.PrintStackTrace (); } catch (ioexception e) {e.printStackTrace (); }} // Imprima a sequência hexadecimal correspondente a string estática privada byte bytetoHexString (byte val) {return integer.tohexstring (val & 0xff); } // Imprima a sequência hexadecimal correspondente a char estática privada String ChartoHexString (char val) {return integer.tohexstring (val); } // Imprima a sequência hexadecimal correspondente a string estática privada curta ShortToHexString (Val curto) {return integer.tohexstring (val & 0xffff); }} Resultados em execução:
bytetoHexString (0x8f): 0x8fChartoHexString (0x8fcf): 0x8fcfreadBoolean (): truereadByte (): 0x41Readchar (): 0x42 43readshort (): 0x4445readInT (): 0x12345678readlong (): 0xfedCBA987654321readUtf (): abcdefghijklmnopqrstwxyz Yan12