DatainputStream
DataInputStream adalah aliran input data. Ini mewarisi dari filterInputStream.
DataInputStream digunakan untuk menghiasi aliran input lainnya, yang "memungkinkan aplikasi untuk membaca tipe data Java dasar dari aliran input yang mendasari dengan cara yang tidak tergantung pada mesin." Aplikasi dapat menggunakan DataOutputStream untuk menulis data yang dibaca oleh DataInputStream.
Daftar Fungsi 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 Static String Readutf (DataInput in) Final String Readutf () Final Int ReadunSignedByte () Int ReadunSignedShort () Final Int Skipbytes (Int Count)
Kode contoh:
Tentang Penggunaan API Detail di DataInputStream:
impor java.io.datainputStream; import java.io.dataoutputStream; import java.io.bytearrayinputStream; impor java.io.file; impor impor java.io.pileoutstream; java.io.filenotfoundException; import java.lang.securityexception;/** * datainputStream dan program uji dataoutputStream * * @author skywang */kelas publik datainputStreamTest {private static final int len = 5; public static void main (string [] args) {// uji dataoutputStream dan menulis data ke aliran output. testDataOutputStream (); // uji dataainputstream untuk membaca data dari hasil aliran output di atas. testDataInputStream (); } / *** Fungsi uji API DataOutPutStream* / private static void testDataOutputStream () {coba {file file = file baru ("file.txt"); DataOutputStream out = DataOutputStream baru (FileOutputStream baru (file)); out.writeboolean (true); out.writebyte ((byte) 0x41); out.writechar ((char) 0x4243); out.writeshort ((pendek) 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 (); }} / ** * DataInputStream Function Tes API * / private static void testDataInputStream () {coba {file file = file baru ("file.txt"); DataInputStream di = DataInputStream baru (FileInputStream baru (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 ()); melampirkan(); } catch (FileNotFoundException e) {e.printstacktrace (); } catch (SecurityException e) {E.PrintStackTrace (); } catch (ioException e) {e.printstacktrace (); }} // Cetak string hexadecimal yang sesuai dengan byte private static string bytetoHexString (byte val) {return integer.tohexstring (val & 0xff); } // cetak string hexadecimal yang sesuai dengan char private statis string chartoHexString (char val) {return integer.toHexString (val); } // Cetak string hexadecimal yang sesuai dengan string statis privat pendek pendek shorttHeHexString (val pendek) {return integer.toHexString (val & 0xffff); }} Hasil Menjalankan:
BYTETOHEXSTRING (0x8f): 0x8FChARTOHEXSTRING (0x8fcf): 0x8fcFreadBoolean (): truereadbyte (): 0x41ReadChar (): 0x42 43ReadShort (): 0x4445ReadInt (): 0x12345678ReadLong (): 0xfedcba987654321Readutf (): abcdefghijklmnopqrstuvwxyz Yan12
Deskripsi Hasil:
(1) Lihat teks file.txt. Data heksadesimal ditampilkan sebagai berikut:
Nilai int yang sesuai dari 001F adalah 31. Ini berarti panjang data UTF-8 yang mengikuti. Panjang huruf "abcdefghijklmnopqrstuvwxyz yan12" adalah 26, dan panjang data UTF-8 yang sesuai dengan "门" adalah 3; Panjang "12" adalah 2. Total panjang = 26+3+2 = 31.
(2) Kembalikan kode sumber string heksadesimal yang sesuai dengan byte adalah sebagai berikut:
Private Static String bytetoHexString (byte val) {return integer.toHexString (val & 0xff);} Pikirkan mengapa kodenya adalah:
return integer.tohexstring (val & 0xff);
Alih-alih
return integer.tohexstring (val);
Mari kita lihat hasil output dari bytetoHexString ((byte) 0x8f); dalam dua kasus di atas.
return integer.tohexstring (val & 0xff); Output yang sesuai adalah "0xFFFFFFFF8F"
return integer.tohexstring (val); Output yang sesuai adalah "0x8f"
Mengapa ini terjadi?
Alasannya sebenarnya sangat sederhana, itu adalah masalah yang disebabkan oleh "mengonversi tipe byte menjadi tipe int".
0x8f dari tipe byte adalah angka negatif, dan biner yang sesuai adalah 10001111; Saat mengonversi byte bilangan negatif ke jenis int, transformasi yang ditandatangani dilakukan (bit baru diisi dengan jumlah bit yang ditandatangani). Bit tanda 0x8f adalah 1, karena ketika mengubahnya menjadi int, diisi dengan "1"; Hasilnya setelah transformasi (biner) adalah 111111111111111111111111111111111111111111111111111111111111111, dan heksadesimal yang sesuai adalah 0xffffff8f.
Karena ketika kita menjalankan integer.tohexstring (val);, yang dikembalikan adalah 0xffffff8f.
Dalam integer.tohexstring (val & 0xff), setara dengan 0xFFFFFFFF8F & 0XFF, dan hasilnya adalah 0x8f.
(3) Kembalikan string heksadesimal yang sesuai dengan char dan pendek. Kode sumber yang sesuai dengan "Kembalikan string heksadesimal yang sesuai dengan char" adalah sebagai berikut:
Private Static String ChartoHexString (char val) {return integer.tohexstring (val);} "Kembalikan string heksadesimal yang sesuai dengan pendek" sesuai dengan kode sumber sebagai berikut:
Private Static String ShortToHexString (Short Val) {return integer.tohexstring (val & 0xffff);} Membandingkan dua fungsi di atas, mengapa yang satu adalah "val" dan yang lainnya adalah "val & 0xffff"?
Melalui analisis (2), kami juga menyimpulkan mengapa "mengembalikan string heksadesimal yang sesuai dengan pendek" adalah untuk mengeksekusi "val & 0xffff".
Namun, mengapa Anda perlu mengeksekusi "val" jika Anda "mengembalikan string hexadecimal yang sesuai dengan char". Alasannya juga sangat sederhana. Di Java, Char adalah tipe yang tidak ditandatangani, akuntansi untuk dua byte. Konversi char ke int tipe, melakukan transformasi yang tidak ditandatangani, dan menambahkan semua diisi dengan 0.
DataOutputStream
DataOutputStream adalah aliran output data. Ini mewarisi dari filteroutputStream.
DataOutputStream digunakan untuk menghiasi aliran output lainnya, menggunakan stream input DataOutputStream dan DataInputStream, "yang memungkinkan aplikasi membaca dan menulis tipe data Java dasar dari aliran input yang mendasari dengan cara yang tidak tergantung pada mesin."
Kode sampel untuk penggunaan API secara terperinci di DataOutstream:
impor java.io.datainputStream; import java.io.dataoutputStream; import java.io.bytearrayinputStream; impor java.io.file; impor impor java.io.pileoutstream; java.io.filenotfoundException; import java.lang.securityexception;/** * datainputStream dan program uji dataoutputStream * * @author skywang */kelas publik datainputStreamTest {private static final int len = 5; public static void main (string [] args) {// uji dataoutputStream dan menulis data ke aliran output. testDataOutputStream (); // uji dataainputstream untuk membaca data dari hasil aliran output di atas. testDataInputStream (); } / *** Fungsi uji API DataOutPutStream* / private static void testDataOutputStream () {coba {file file = file baru ("file.txt"); DataOutputStream out = DataOutputStream baru (FileOutputStream baru (file)); out.writeboolean (true); out.writebyte ((byte) 0x41); out.writechar ((char) 0x4243); out.writeshort ((pendek) 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 (); }} / ** * DataInputStream Function Tes API * / private static void testDataInputStream () {coba {file file = file baru ("file.txt"); DataInputStream di = DataInputStream baru (FileInputStream baru (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 ()); melampirkan(); } catch (FileNotFoundException e) {e.printstacktrace (); } catch (SecurityException e) {E.PrintStackTrace (); } catch (ioException e) {e.printstacktrace (); }} // Cetak string hexadecimal yang sesuai dengan byte private static string bytetoHexString (byte val) {return integer.tohexstring (val & 0xff); } // cetak string hexadecimal yang sesuai dengan char private statis string chartoHexString (char val) {return integer.toHexString (val); } // Cetak string hexadecimal yang sesuai dengan string statis privat pendek pendek shorttHeHexString (val pendek) {return integer.toHexString (val & 0xffff); }} Hasil Menjalankan:
BYTETOHEXSTRING (0x8f): 0x8FChARTOHEXSTRING (0x8fcf): 0x8fcFreadBoolean (): truereadbyte (): 0x41ReadChar (): 0x42 43ReadShort (): 0x4445ReadInt (): 0x12345678ReadLong (): 0xfedcba987654321Readutf (): abcdefghijklmnopqrstuvwxyz Yan12