DataInputStream
DataInputStream - это поток ввода данных. Это наследует от FilterInputStream.
DataInputStream используется для украшения других входных потоков, что «позволяет приложениям считывать основные типы данных Java из базового входного потока независимым от машины». Приложения могут использовать DataOutputStream для записи данных считыванием данных DataInputStream.
Список функций DataInputStream:
DataInputStream (inputStream in) Final Int Read (Byte [] буфер, int offset, int length) final int Read (Byte [] Buffer) Final Boolean Readboolean () Final Byte Readbyte () Final char readchar () Final Double Readdouble () Final Floatfloat () final void void void void void void void vise int final void void void void void void void void void void void void void void void o readint () final String readline () Final Long Readlong () Final Short Readshort () Final Static String Readutf (dataInput in) Final String readutf () final int rethunSignedByte () final int readunSignedShort () final int skipbytes (int count)
Пример кода:
О подробном использовании API в DataInputStream:
Импорт java.io.datainputstream; import java.io.dataoutputstream; импорт java.io.bytearrayinputstream; import java.io.file; импорт java.io.inputstream; import java.io.ioexception; импорт java.io.fileoutputerem; import java.io.ioexcept java.io.filenotfoundexception; import java.lang.securityException;/** * DataInputStream и DataOutputStream Программа испытаний * * @author Skywang */public class DataInputStreamTest {Private Static Final int = 5; public static void main (string [] args) {// Проверка dataOutputStream и записать данные в выходной поток. testDataOutputStream (); // Проверка DataInputStream для чтения данных из приведенного выше результата выходного потока. testDatainputStream (); } / *** DataOutputStream Test Function* / private static void testDataOutputStream () {try {file file = new File ("file.txt"); DataOutputStream OUT = new DataOutputStream (New FileOutputStream (File)); out.writeboolean (true); out.writebyte ((байт) 0x41); out.writechar ((char) 0x4243); out.writeshort ((короткий) 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 Test Function * / 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 ("reartint (): 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 (); }} // Распечатать шестнадцатеричную строку, соответствующую байтовой частной статической строке bytetoHexstring (byte val) {return integer.tohexstring (val & 0xff); } // Распечатать шестнадцатеричную строку, соответствующую чарной статической строке chartohexstring (char val) {return integer.tohexstring (val); } // Распечатать шестнадцатеричную строку, соответствующую короткой частной статической строке ShortToHexString (Short Val) {return Integer.tohexstring (val & 0xffff); }} Результаты работы:
BytetoHexString (0x8f): 0x8fChartOhexString (0x8fcf): 0x8fcfreadboolean (): trueReadbyte (): 0x41Readchar (): 0x42 43ReadShort (): 0x4445ReadInt (): 0x12345678Readlong (): 0xFEDCBA987654321ReadUTF (): ABCDEFGHIJKLMNOPQRSTUVWXYZ Ян12
Результаты Описание:
(1) Просмотр текста file.txt. Шестнадцатеричные данные отображаются следующим образом:
Соответствующее значение int 001f составляет 31. Это означает длину следующих данных UTF-8. Длина буквы «abcdefghijklmnopqrstuvwxyz yan12» составляет 26, а длина данных UTF-8, соответствующих «门», составляет 3; Длина «12» составляет 2. Общая длина = 26+3+2 = 31.
(2) Вернуть исходный код шестнадцатеричной строки, соответствующий байту, выглядит следующим образом:
Private Static String BytetoHexString (byte val) {return integer.tohexstring (val & 0xff);} Подумайте о том, почему код:
return integer.tohexstring (val & 0xff);
Вместо
return integer.tohexstring (val);
Давайте сначала посмотрим на результаты выходных данных Bytetohexstring ((Byte) 0x8f); В вышеупомянутых двух случаях.
return integer.tohexstring (val & 0xff); Соответствующий вывод "0xffffff8f"
return integer.tohexstring (val); Соответствующий вывод "0x8f"
Почему это происходит?
Причина на самом деле очень проста, это проблема, вызванная «преобразованием типа байта в тип int».
0x8f типа байта является отрицательным числом, а соответствующий двоичный файл составляет 10001111; При преобразовании отрицательного числа байта в тип INT выполняется подписанное преобразование (новые биты заполнены количеством подписанных битов). Знак 0x8F составляет 1, потому что при преобразовании его в int он заполнен «1»; Результат после преобразования (двоичный) составляет 11111111111111111111111111111111111er111er111er11111 :111111111, а соответствующий шестнадцатеричный - 0xffffff8f.
Потому что, когда мы выполняем integer.tohexstring (val);, возвращаемый - 0xffffff8f.
В integer.tohexstring (val & 0xff) он эквивалентен 0xffffff8f & 0xff, и результат - 0x8f.
(3) вернуть шестнадцатеричную строку, соответствующую Чар и Короткому. Исходный код, соответствующий «вернуть шестнадцатеричную строку, соответствующую чару», заключается в следующем:
Частная статическая строка chartohexstring (char val) {return integer.tohexstring (val);} «Вернуть шестнадцатеричную строку, соответствующую короткому», соответствует исходному коду следующим образом:
Private Static String ShortToHexString (Short Val) {return Integer.tohexstring (val & 0xffff);} Сравнивая две функции выше, почему одна - «val», а другая - "val & 0xffff"?
Благодаря анализу (2) мы также выводим, почему «вернуть шестнадцатеричную строку, соответствующую короткому», - это выполнить «val & 0xffff».
Однако зачем вам нужно выполнять «val», если вы «верните шестнадцатеричную строку, соответствующую Чар». Причина также очень проста. В Java Char - это безписанный тип, учитывающий два байта. Преобразовать char в тип int, выполняет беспигенный преобразование и добавляет все заполненные 0.
DataOutputStream
DataOutputStream - это потоки вывода данных. Это наследует от FilterOutputStream.
DataOutputStream используется для украшения других выходных потоков, используя потоки входных данных DataOutputStream и DataInputStream, «позволяя приложениям считывать и записывать основные типы данных Java из базового входного потока не независимым от машины».
Пример кода для подробного использования API в DataOutStream:
Импорт java.io.datainputstream; import java.io.dataoutputstream; импорт java.io.bytearrayinputstream; import java.io.file; импорт java.io.inputstream; import java.io.ioexception; импорт java.io.fileoutputerem; import java.io.ioexcept java.io.filenotfoundexception; import java.lang.securityException;/** * DataInputStream и DataOutputStream Программа испытаний * * @author Skywang */public class DataInputStreamTest {Private Static Final int = 5; public static void main (string [] args) {// Проверка dataOutputStream и записать данные в выходной поток. testDataOutputStream (); // Проверка DataInputStream для чтения данных из приведенного выше результата выходного потока. testDatainputStream (); } / *** DataOutputStream Test Function* / private static void testDataOutputStream () {try {file file = new File ("file.txt"); DataOutputStream OUT = new DataOutputStream (New FileOutputStream (File)); out.writeboolean (true); out.writebyte ((байт) 0x41); out.writechar ((char) 0x4243); out.writeshort ((короткий) 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 Test Function * / 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 ("reartint (): 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 (); }} // Распечатать шестнадцатеричную строку, соответствующую байтовой частной статической строке bytetoHexstring (byte val) {return integer.tohexstring (val & 0xff); } // Распечатать шестнадцатеричную строку, соответствующую чарной статической строке chartohexstring (char val) {return integer.tohexstring (val); } // Распечатать шестнадцатеричную строку, соответствующую короткой частной статической строке ShortToHexString (Short Val) {return Integer.tohexstring (val & 0xffff); }} Результаты работы:
BytetoHexString (0x8f): 0x8fChartOhexString (0x8fcf): 0x8fcfreadboolean (): trueReadbyte (): 0x41Readchar (): 0x42 43ReadShort (): 0x4445ReadInt (): 0x12345678Readlong (): 0xFEDCBA987654321ReadUTF (): ABCDEFGHIJKLMNOPQRSTUVWXYZ Ян12