Во -первых, позвольте мне представить разницу между InputStreamReader и FileReader. Конкретный контент заключается в следующем:
InputStreamReader и BufferedReader. Наиболее важным классом среди них является inputStreamReader, который является мостом для преобразования байтов в символы. Вы можете повторно определить метод кодирования в конструкторе. Если не указано, будет принят метод кодирования по умолчанию базовой операционной системы, такой как GBK и т. Д.
FileReader и InputStreamReader включают преобразование кодирования (укажите метод кодирования или используйте кодирование ОС по умолчанию), а искаженная код может возникнуть на разных платформах! FileInputStream обрабатывается в двоичном режиме и не имеет искаженного кода.
FileInputStream Byte Streams считывается байт -байт.
Потоки символов FileReader читаются как символы один за другим.
BufferedReader bufreader = null; inputStreamReader isR = null; fileReader fr = null; try {for (String filename: filenames) {Метод 1: isr = new InputStreamReader (new FileInputStream ("d: /test.txt"), "UTF-8"); bufreader = new BufferedReader (ISR); Метод 2: fr = new FileReader ("d: /test.txt"); bufreader = new BufferedReader (FR); while (bufreader.ready ()) {// 1. Получить каждую строку строки данных dataline = bufreader.readline (); }}Разница между InputStream и читателем
Есть два абстрактных класса ниже java.io: inputstream и читатель
InputStream - это суперкласс, который представляет все классы байтового входного потока.
Читатель - абстрактный класс для чтения потоков персонажей
InputStream обеспечивает чтение байтовых потоков, а не чтение текста, которое является фундаментальным различием между ним и классом читателей.
То есть массив или строка ЧАР читается с использованием считывателя, а байтовый массив читается с использованием inputstream.
После прояснения фундаментальной разницы между двумя суперклассами давайте посмотрим на использование их подклассов ниже. Вот лишь некоторые из наиболее часто используемых объяснений
InputStream
| __FileinputStream
FileInputStream получает входные байты из файла в файловой системе.
Сводка методов строительства
FileInputStream (файл файл)
Создайте FileInputStream, открыв подключение к фактическому файлу, который указан файлом файла в файловой системе.
FileInputStream (FileScriptor fdobj)
Создайте FileInputStream, используя дескриптор файла FDOBJ, который представляет существующее соединение с фактическим файлом в файловой системе.
FileInputStream (имя строки)
Создайте FileInputStream, открыв подключение к фактическому файлу, указанному по имени PathName в файловой системе.
Читатель
|-буферный читатель
| ___ InputStreamReader
| __Filereader
BufferedReader: прочитайте текст из потока ввода символов и буферизирует отдельные символы, тем самым позволяя эффективному чтению символов, массивов и строк.
Сводка методов строительства
BufferedReader (читатель в)
Создает буферный входной поток символов, который использует входной буфер размер по умолчанию.
BufferedReader (читатель в, int sz)
Создает буферный входной поток символов, который использует входной буфер указанного размера.
BufferedReader (Java Platform SE 6)
Самая большая особенность BufferedReader - это настройка буфера. Обычно каждый запрос на чтение, сделанный читателем, приводит к соответствующим запросам чтения для базового символа или байтового потока. Если буферизации нет, каждый вызов read () или readline () приведет к тому, что байты будут считываться из файла, и преобразование его в символы и возврат его, что чрезвычайно неэффективно.
Используйте BufferedReader, чтобы указать размер буфера, или можно использовать размер по умолчанию. В большинстве случаев значение по умолчанию достаточно большое.
Следовательно, рекомендуется обернуть всех читателей, чьи операции чтения () могут быть дорогими (например, FileReader и InputStreamRearder) с BufferedReader.
Например,
BufferedReader in = new BufferedReader (новый FileReader ("foo.in"));Буферный вход в указанный файл.
InputStreamReader (Java Platform SE 6)
InputStreamReader - это мост между потоками байтов и потоками символов: он считывает байты, используя указанный Charset и декодирует их в символы. Набор символов, который он использует, может быть указан или явно задан именем, или он может принять набор символов платформы по умолчанию.
Сводка методов строительства
InputStreamReader (InputStream In) Создает inputStreamReader, который использует набор символов по умолчанию. InputStreamReader (InputStream In, Charset CS) создает inputStreamReader, который использует заданный набор символов. InputStreamReader (InputStream In, CharsetDecoder DEC) создает inputStreamReader, который использует заданный декодер набора символов. InputStreamReader (inputStream in, String charsetName) создает inputStreamReader, который использует указанный набор символов.
Каждый вызов метода read () в InputStreamReader приводит к тому, что один или несколько байтов считываются из базового входного потока. Чтобы обеспечить эффективное преобразование от байта в символ, вы можете прочитать больше байтов из базового потока заранее, превышая байты, необходимые для удовлетворения текущей операции чтения.
Чтобы достичь максимальной эффективности, рассмотрите возможность обертки входного звена внутри буферизации. Например:
BufferedReader in = new BufferedReader (New InputStreamReader (System.in));
Самой большой особенностью InputStreamReader является то, что он может ссылаться на фиксированный формат кодирования конверсии, который невозможно для других классов. Это можно увидеть из метода строительства. Это очень полезно при чтении китайских иероин.
FileReader
1) Введение в класс FileReader:
Подклассы класса InputStreamReader, все методы (read () и т. Д.) Унаследованы от родительского класса InputStreamReader;
2) Различия от класса InputStreamReader:
Сводка методов строительства
FileReader (файл файл)
Создайте новый FileReader, учитывая файл, из которого данные читаются.
FileReader (FileScriptor FD)
Создайте новый FileReader, учитывая Filedescriptor, из которого данные считываются.
FileReader (String FileName)
Создайте новый FileReader, учитывая имя файла, с которого данные читаются
Основным отличием между этим классом и его родительским классом InputStreamReader является конструктор, и основным отличием является конструктор!
Из конструктора InputStreamReader параметры являются методом ввода и кодирования. Видно, что когда вы хотите указать метод кодирования, необходимо использовать класс InputStreamReader; и параметры конструктора FileReader такие же, как FileInputStream, который представляет собой файловый объект или строка, представляющая путь. Видно, что когда вы хотите прочитать файл на основе объекта файла или строки, используйте FileReader;
Я думаю, что функция подкласса FileReader заключается в этом небольшом разделении труда. Основным отличием между этим классом и его родительским классом InputStreamReader является конструктор, и основным отличием является конструктор!
От InputStreamReader
В конструкторе параметры являются входными потоками и методом кодирования. Видно, что когда вы хотите указать метод кодирования, необходимо использовать класс InputStreamReader; и параметры конструктора FileReader такие же, как FileInputStream, который представляет собой файловый объект или строка, представляющая путь. Видно, что когда вы хотите прочитать файл на основе объекта файла или строки, используйте FileReader;
Я думаю, что функция подкласса FileReader заключается в этом небольшом разделении труда.
Два соединения и различия
(1) символы и байты:
Класс FileInputStream использует двоичный вход/вывод, а скорость ввода/вывода является быстрой и эффективной, но его метод чтения () считывает байт (двоичные данные), что очень неблагоприятно для людей, чтобы читать, и он не может напрямую работать на символах в файле, таких как замена и поиск (он должен работать в байтах);
Класс считывателей компенсирует этот дефект и может вводить/выводиться в текстовом формате, что очень удобно; Например, вы можете использовать while ((ch = FileReader.read ())! =-1), чтобы прочитать файл; Вы можете использовать метод чтения BufferedRider () для чтения текстовой линии по строке.
(2) Кодирование
InputStreamReader, это мост для преобразования байтов в символы. Вы можете повторно определить метод кодирования в конструкторе. Если не указано, будет принят метод кодирования по умолчанию базовой операционной системы, такой как GBK и т. Д.
FileReader и InputStreamReader включают преобразование кодирования (укажите метод кодирования или используйте кодирование ОС по умолчанию), а искаженная код может возникнуть на разных платформах! FileInputStream обрабатывается в двоичном режиме и не имеет искаженного кода.
Следовательно, при определении метода кодирования необходимо использовать класс InputStreamReader, поэтому это мост для преобразования байтов в символы;
(3) Площадь кеша
Класс BufferReader используется для обертывания всех читателей, чьи операции read () могут быть дорогими (например, FileReader и InputStreamReader).
(4) Стандартизированное использование
Суммируйте вышеперечисленное и придумайте лучшее стандартное использование:
1) файл файла = новый файл ("hello.txt");
FileInputStream in = new FileInputStream (file);
2) файл файла = новый файл ("hello.txt");
FileInputStream in = new FileInputStream (file); InputStreamReader inReader = new InputStreamReader (in, "UTF-8"); BufferedReader Bufreader = new BufferedReader (inReader);
3) файл файла = новый файл ("hello.txt");
FileReader filereader = new FileReader (файл); BufferedReader Bufreader = new BufferedReader (FileReader);