BufferedInputStream
BufferedInputStream - это буферный входной поток. Это наследует от FilterInputStream.
Целью BufferedInputStream является добавление некоторых функций в другой входной поток, такие как предоставление «функциональности буферизации» и поддержка «Mark () Marks» и «Сброс () сброс».
BufferedInputStream по существу реализован через внутреннюю массив буфера. Например, после создания BufferedInputStream, соответствующего определенному входному потоку, когда мы считываем данные входного потока через read (), BufferedInptream заполнит данные входного потока в буфере партиями. Всякий раз, когда данные в буфере считываются, входной поток снова заполняет буфер данных; Это будет повторяться до тех пор, пока мы не закончим читать местоположение данных ввода.
Список функций BufferedInputStream:
BufferedInputStream(InputStream in)BufferedInputStream(InputStream in, int size)synchronized int available()void close()synchronized void mark(int readlimit)boolean markSupported()synchronized int read()synchronized int read(byte[] buffer, int offset, int byteCount)synchronized void reset()synchronized long skip(long байт
Пример кода:
Для получения подробного использования API в BufferedInputStream см. Пример кода (BufferedInputStreamTest.java):
Импорт java.io.bufferedinptstream; import java.io.bytearrayinptstream; import java.io.file; импорт java.io.inputstream; импорт java.io.fileinputstream; импорт java.io.ioexception; импорт java.io.filenotfoundexception; Программа тестирования BufferedInputStream * * @author Skywang */public Class BufferedInputStreamTest {Private Static Final int len = 5; public static void main (string [] args) {testbufferedInputStream (); } / *** Функция теста API BufferedInputStream* / private static void testbufferedinputStream () {// Создание BufferedInptream Byte Byte -Byte -поток, содержимое является массивом Arrayletters Try {file file = new File ("BufferedInptream.txt"); InputStream in = new BufferedInputStream (New FileInputStream (файл), 512); // Читать 5 байтов из байтового потока. «Abcde», A соответствует 0x61, B соответствует 0x62 и т. Д. Для ... for (int i = 0; i <len; i ++) {// Если вы можете продолжать читать следующий байт, прочитайте следующий байт if (in.available ()> = 0) {// Читать «следующий байт ofte stream» int tmp = in. in.read (); System.out.printf ("%d: 0x%s/n", i, integer.tohexstring (tmp)); }} // Если «этот байтовый поток» не поддерживает функцию маркировки, выходите непосредственно if (! In.marksupported ()) {System.out.println ("Сделать не поддерживается!"); возвращаться ; } // отмечать «позиция индекса тока», то есть отметьте элемент 6 -й позиции - "f" // 1024 соответствует Marklimit in.mark (1024); // пропустить 22 байта. in.skip (22); // Читать 5 байт байт [] buf = new Byte [len]; in.read (buf, 0, len); // конвертировать BUF в строку строки. String str1 = new String (buf); System.out.printf ("str1 =%s/n", str1); // сбросить «индекс входного потока» в положение, отмеченное Mark (), то есть сбросить на «f». in.reset (); // Читать 5 байтов в BUF из «Сброс байтового потока». То есть читать «fghij» in.read (buf, 0, len); // конвертировать BUF в строку строки. String str2 = new String (buf); System.out.printf ("str2 =%s/n", str2); in.close (); } catch (filenotFoundException e) {e.printstackTrace (); } catch (securityException e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); }}} Содержание BufferedInputStream.txt в программе выглядит следующим образом:
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz
Результаты работы:
0: 0x611: 0x622: 0x633: 0x644: 0x65str1 = 01234str2 = fghij
BufferedOutputStream
BufferedOutputStream - это буферный выходной поток. Это наследует от FilterOutputStream.
Функция BufferedOutputStream заключается в том, чтобы обеспечить «буферизацию» в другой выходной поток.
Список функций BufferedOutputStream:
BufferedOutputStream (outputStream Out) BufferedOutputStream (outputStream Out, int size) Синхронизированный void cloud () синхронизированный void flush () синхронизированный void wrise (byte [] буфер, смещение int, длина int) void write (int onybyte)
Пример кода:
Для получения подробного использования API в BufferedOutputStream см. Пример кода (BufferedOutputStreamTest.java):
Импорт java.io.bufferedoutputstream; import java.io.file; import java.io.outputstream; import java.io.fileOutputStream; импорт java.io.ioexception; импорт java.io.filenotfoundexception; импорт java.lang.securityexexception; импорт java. @author Skywang */public Class BufferedOutputStreamTest {Private Static Final int len = 5; // Соответствует английским буквам "Abcddefghijklmnopqrsstttuvwxyz" частный статический окончательный байт [] Arrayletters = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6, 0x6, 0x6, 0x6, 0x6, 0x67, 0x68, 0x69, 0x6a, 0x67, 0x6, 0x68, 0x69, 0x6a, 0x67, 0x68, 0x69, 0x6a, 0x67, 0x68, 0x69, 0x6a, 0x67, 0x68, 0x69, 0x6a, 0x67, 0x68, 0x69, 0x6a, 0x67, 0x68, 0x69, 0x6a. 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a}; public static void main (string [] args) {testbufferedOutputStream (); } / *** Функция теста API BufferedOutputStream* / private static void testbufferedOutputStream () {// Создать BufferedOutputStream, соответствующий «Поток вывода файлов» // его соответствующий размер буфера составляет 16, то есть, когда данные буфера> = 16, содержание буфера будет автоматически записано в выходной поток. try {file file = new File ("out.txt"); OutputStream out = new BufferedOutputStream (New FileOutputStream (файл), 16); // Напишите первые 10 байт массива Arrayletters в выходной поток Out.write (Arrayletters, 0, 10); // Написать «newline/n» в выходной потоке out.write ('/n'); // Тодо! // out.flush (); readUserInput (); out.close (); } catch (filenotFoundException e) {e.printstackTrace (); } catch (securityException e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); }} / *** Читать пользовательский ввод* / private static void readuserInput () {System.out.println ("Пожалуйста, введите текст:"); Scanner Reader = новый сканер (System.in); // ждать входной строки str = reader.next (); System.out.printf («Вход: %s/n», str); }} Результаты работы:
Сгенерируйте файл «out.txt», а содержимое файла «Abcdefghij».
Пошаговое тестирование: выполните следующие три шага, чтобы проверить программу, чтобы просмотреть размер буфера и роль flush ().
Тип 1: оригинальная программа
(1) Запустите программу. Когда программа ждет ввода пользователя, проверьте текстовое содержимое "out.txt"; Найдите: контент пуст.
(2) Запустите программу. После ввода пользователя проверьте текстовое содержание «out.txt»; Найдите: контент "Abcdefghij".
Из этого мы обнаруживаем, что результаты (01) и (02) различны; Причина, по которой содержание out.txt в (01) пуста, заключается в том, что размер буфера, соответствующий out.txt, составляет 16 байт, и мы записываем только 11 байтов, поэтому он не выполняет операцию прозрачного буфера (то есть записать данные буфера в выходной поток).
Содержание, соответствующее out.txt, является «abcdefghij», потому что выполняется out.close (), который закрывает выходной поток; Перед закрытием выходного потока данные буфера будут записаны в выходной поток.
Примечание. При повторном тестировании сначала удалите.txt.
Тип 2: Добавьте следующее оператор перед ReadUserInput ()
out.flush ();
Цель этого предложения - написать «буферный контент» в выходной поток.
(1) Запустите программу. Когда программа ждет ввода пользователя, проверьте текстовое содержимое "out.txt"; Найдите: контент "Abcdefghij".
(2) Запустите программу. После ввода пользователя проверьте текстовое содержание «out.txt»; Найдите: контент "Abcdefghij".
Исходя из этого, мы обнаружили, что тот же результат, что и (01) и (02), соответствующее содержание out.txt - это «abcdefghij». Это связано с тем, что выполняется операция flush (), которая используется для записи данных буфера в выходной поток.
Примечание. При повторном тестировании сначала удалите.txt!
Тип 3: на основе первого типа,
out.write (Arrayletters, 0, 10);
Модифицирован на
out.write (Arrayletters, 0, 20);
(1) Запустите программу. Когда программа ждет ввода пользователя, проверьте текстовое содержимое "out.txt"; Найдите, что контент - это «AbcDefghijklmnopqrst» (исключая Enter).
(02) Запустите программу. После ввода пользователя проверьте текстовое содержание «out.txt»; Найдите, что содержание - это «AbcDefghijklmnopqrst» (включая Enter).
Исходя из этого, мы обнаружили, что (01) результат прогона - «abcdefghijklmnopqrst» (исключая возврат перевозки). Это связано с тем, что размер буфера составляет 16, и мы пишем 20 байт через Out.write (Arrayletters, 0, 20), превышая размер буфера; В настоящее время все входы будут записаны непосредственно в выходной поток без прохождения через буфер.
(3) Результатом операции является «abcdefghijklmnopqrst» (включая возврат перевозки), потому что при выполнении.
Примечание. При повторном тестировании сначала удалите.txt!