1. BufferedReader Class
Полем Библиотека классов:
java.lang.object
java.io.reader
Java.io.bufferedReader
Полем Основные понятия:
Public Class BufferedReader расширяет читателя
Прочитайте текст из потока ввода символов и буферируйте отдельные символы, что позволяет эффективному чтению символов, массивов и строк. Вы можете указать размер буфера, или можно использовать размер по умолчанию. В большинстве случаев значение по умолчанию достаточно большое.
Как правило, каждый запрос на чтение, выполненный с читателем, приводит к соответствующему запросу чтения для базового символа или байтового потока. Следовательно, рекомендуется обернуть всех читателей, чьи операции чтения () могут быть дорогими (например, FileReader и InputStreamRead) с BufferedReader.
Поток BufferedReader может читать текстовые линии и создает объект BufferedReader, передавая объект считывателя в BufferedReader. Это связано с тем, что FileReader не предоставляет функцию чтения текстовых строк.
Полем Демонстрация:
Захватить введенный оператор через буферный читатель:
Импорт java.io.*; Class BufferedReaderDemo {public static void main (string [] args) бросает ioException {bufferedReader bufferedReader = new BufferedReader (New InputStreamReader (System.in)); System.out.print («Пожалуйста, введите серию текста, который может включать пространства:»); String Text = BufferedReader.Readline (); System.out.println («Пожалуйста, введите текст:»+Text); }}Аннотация:
бросает ioException, бросает исключение
InputStreamReader - это мост между потоком байтов и потоком символов
2. inputStreamReader Class
InputStreamReader преобразует байтовый поток в потоку символов. Это мост между потоком байтов и потоком символов. Если кодирование символов не указано, процесс декодирования будет использовать кодирование символов платформы по умолчанию, например: GBK.
Метод строительства:
InputStreamReader ISR = новый InputStreamReader (InputStream In); // Создание класса InputStreamReader с набором кодирования по умолчанию по умолчанию
InputStreamReader ISR = New InputStreamReader (inputStream In, String charsetName); // Создание указанного набора кодирования
InputStreamReader Class.
Параметр в объекте получается inputstream in = System.in;. // Читать данные на клавиатуре.
Или inputstream in = new FileInputStream (String FileName); // Читать данные в файле. Можно видеть, что FileInputStream является подклассом InputStream.
Основной метод: int Read (); // Прочитайте один символ.
int Read (char [] cbuf); // Сохранить символы чтения в массив. Возвращает количество символов.
Полем Демонстрация:
Импорт java.io.*; Class InputStreamReamerDemo {public static void transReadNobuf () бросает ioException { /*** Там нет буфера, вы можете использовать только метод read (). */// Читать Byte Stream // inputStream in = System.in; // Читать вход клавиатуры. InputStream in = new FileInputStream ("d: //demo.txt"); // Читать данные файла. // Преобразование потоковых байтов в потоку символов. Чтобы включить эффективное преобразование из байтов в символы, // вы можете прочитать больше байтов из базового потока заранее. InputStreamReader ISR = новый InputStreamReader (in); // Читать // Полное в одно предложение. // inputStreamReader isr = new InputStreamReader (// new FileInputStream ("d: //demo.txt")); char [] cha = new char [1024]; int len = isr.read (cha); System.out.println (новая строка (cha, 0, len)); isr.close (); } public static void transReadbyBuf () бросает ioException { /*** Используйте буферы для использования методов read () и readline () буферного объекта. */// Читать Byte Stream // inputStream in = System.in; // Читать данные на клавиатуре inputstream in = new FileInputStream ("d: //demo.txt"); // Читать данные в файле. // Преобразование потоковых байтов в потоку символов. InputStreamReader ISR = new InputStreamReader (in); // read // Создать буферизатор буферизатора символов Bufferreader BUFR = new BufferedReader (ISR); // Buffered // BufferedReader bufr = new BufferedReader (// new InputStreamReader (new FileInputStream ("d: //demo.txt")); может быть объединен в одно предложение. /*int ch = 0; ch = bufr.read (); System.out.println ((char) ch); */ String Line; while ((line = bufr.readline ())! = null) {system.out.println (line); } isr.close (); }}3. Реальные случаи inputStreamReader и BufferedReader (некодированный набор)
импортировать java.io.*; class utilresource {private void initializersource () {try {// Читать файл и записать его в UTF-8 Form BufferedReader Bufread; Строка читать; bufread = new BufferedReader (New InputStreamReader (ResourceHelper .getResourceInputStream ("pinyin.txt"))); while ((read = bufread.readline ())! = null) {System.out.println (read); } bufread.close (); } catch (filenotfoundexception ex) {ex.printstacktrace (); } catch (ioException ex) {ex.printstackTrace (); }}}Примечание: pinyin.txt помещается в корневой каталог проекта
Импорт java.io.bufferedinputstream; import java.io.fileinputstream; import java.io.filenotfoundexception; class resourcehelper { / ** * @param resourcename * @return * @return * / static bufferedinptream getResourceinptream (String resourcenam FileInputStream (ResourceName)); } catch (filenotfoundexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); } return null; }}Суммировать:
InputStreamReader Class
Это мост между потоком байта и потоком символов, охватывающий входной поток внутри. Он считывает символы по одному за раз в более высоком уровне, входы/выходы в текстовом формате и могут указать формат кодирования;
BufferedReader Class
BufferedReader расширяется классом Reader, предоставляя общее чтение текста в буферизации, и обеспечивает очень практичную линию чтения, которая считывает текстовую линию, считывает текст из потока ввода символов и буферизирует каждый символ, обеспечивая эффективное чтение символов, массивов и строк.
PS: связь между InputStream, InputStreamReader и Reader
InputStream: Результатом является байтовый входной поток. После inputstream.read («имя файла») результатом является байтовый поток.
Читатель: чтение потока персонажа
InputStreamReader: мост от байтов до символов. InputStreamReader (inputStream.read ("filename"));
reader.read (inputStreamReader (inputStream in)); можно изменить с байта на характер, печатать и отображаться.
java.io.reader и java.io.inputstream образуйте класс ввода Java.
Читатель используется для чтения 16-битных символов, то есть кодируемых юникодом символов; в то время как inputstream используется для чтения символов ASCII и двоичных данных.
Читатель поддерживает 16-битный вывод символов Unicode, а inputstream поддерживает 8-битный выход символов.
Читатель и Inputstream - это два набора параллельных и независимых механизмов уровня, предоставленных библиотекой ввода/вывода, соответственно. 1byte = 8bits inputstream и outputstream используются для обработки 8-битных потоков, а считыватель и писатель используются для обработки 16-битных потоков.
На языке Java тип байта 8-битный, а тип Char-16-битный, поэтому вам необходимо использовать читателя и писателя при обработке китайца.
Стоит отметить, что под этими двумя уровнями механизмов также существует мостовой inputstreamReader и outputStreamWriter, который отвечает за адаптацию inputStream к читателю и адаптацию выходного потока к писателю.
В Java существуют различные типы входных потоков считывателя, которые соответствуют различным источникам данных:
FileReader используется для ввода из файла; ChararrayReader используется для ввода из массива символов в программе; StringReader используется для ввода из строки в программе; PipedReader используется для чтения данных, записанных в трубопровод от Pipedwriter в другой потоке.
Существуют также различные типы входных потоков ввода, соответствующих различным источникам данных: FileInputStream, BytearRayinptStream, StringBufferInptStream, PipedInputStream.
Кроме того, существует два входных потока ввода, которые не имеют соответствующего типа считывателя: сокет используется для сокетов; UrlConnection используется для URL -соединений. Эти два класса используют getInputStream () для чтения данных.
Соответственно, существуют сходные различия между java.io.writer и java.io.outputstream.
Что касается inputstream.read (byte [] b) и inputstream.read (byte [] b, int off, int len) оба метода используются для чтения нескольких байтов из потока. Опытные программисты обнаружат, что эти два метода часто не могут прочитать количество байтов, которые они хотят прочитать. Например, в первом методе программисты часто надеются, что программа может читать байты B.length, но реальная ситуация заключается в том, что система часто не может читать так много. После тщательного чтения инструкций Java API вы обнаружите, что этот метод не гарантирует, что он может прочитать так много байтов, он может гарантировать только, что он может прочитать до многих байтов (не менее 1). Поэтому, если вы хотите, чтобы программа прочитала байты счета, лучше всего использовать следующий код:
byte [] b = новый байт [count]; int ReadCount = 0; // количество байтов, которые были успешно прочитаны, пока (readcount <count) {readcount += in.read (bytes, readcount, count - readcount); } Этот код может гарантировать, что байты подсчета читаются, если только исключение IO не встречается в середине или в конце потока данных (EOFException)