в чем разница в использовании BufferedReader и BufferedInputStream для чтения файла

У меня возникло сомнение, когда я просматривал программу, чтобы прочитать файл. Мы можем прочитать файл, используя BufferedReader, который выглядит следующим образом.

package com.mkyong.io;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderExample {

    public static void main(String[] args) {

        BufferedReader br = null;

        try {

            String sCurrentLine;

            br = new BufferedReader(new FileReader("C:\\testing.txt"));

            while ((sCurrentLine = br.readLine()) != null) {
                System.out.println(sCurrentLine);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)br.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

    }
}

И мы также можем прочитать файл, используя BufferedInputStream, который выглядит следующим образом:

package com.mkyong.io;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class BufferedInputStreamExample {

    public static void main(String[] args) {

        File file = new File("C:\\testing.txt");
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        DataInputStream dis = null;

        try {
            fis = new FileInputStream(file);

            bis = new BufferedInputStream(fis);
            dis = new DataInputStream(bis);

            while (dis.available() != 0) {
                System.out.println(dis.readLine());
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fis.close();
                bis.close();
                dis.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

Поэтому я сомневаюсь, в чем разница в использовании BufferedReader и BufferedInputStream и что более эффективно.


person FIFA oneterahertz    schedule 30.03.2016    source источник
comment
Я думаю, вы должны пометить этот вопрос с помощью Java, а не JavaScript, чтобы получить соответствующие ответы.   -  person Prahlad Yeri    schedule 30.03.2016
comment
Потоки предназначены для двоичных данных: они читают и записывают байты. Читатели предназначены для текстовых данных: они читают и записывают символы. Если вы хотите прочитать текст, используйте Reader. И никогда не используйте available(): он делает не то, что вы думаете.   -  person JB Nizet    schedule 30.03.2016
comment
@PrahladYeri Я использовал только теги java, file-io,bufferedreader,fileinputstream,bufferedinputstream. Я нигде не вижу, пометил ли я javascript   -  person FIFA oneterahertz    schedule 30.03.2016
comment
@JBNizet Я знаю, что метод readLine() для datainputstream устарел, поэтому я также не использую метод available(), но я сомневаюсь, что если мы используем BufferedInputStream для чтения файла и BufferedReader для чтения файла, я получаю тот же результат. Тогда почему ребята из Java представили как bufferedreader, так и bufferedinputstream, они могли бы ввести любой из них, чтобы избежать путаницы.   -  person FIFA oneterahertz    schedule 30.03.2016
comment
Он устарел, потому что он никогда не должен был существовать. DataInputStream.readLine() считает каждый байт символом. Это неверно для большинства кодировок символов. В основном он всегда использует ASCII, не соблюдает кодировку платформы и не поддерживает какую-либо другую. Читатели используются для правильного чтения символов с надлежащей поддержкой кодировки символов. Вы также предполагаете, что все, что вам нужно делать с символьными потоками, — это читать строку за строкой, но это не единственный вариант использования. Так что на самом деле нет никакой путаницы: потоки для байтов, чтения/записи для символов.   -  person JB Nizet    schedule 30.03.2016
comment
@JBNizet Теперь я понял разницу. Разница заключается в кодировке символов. Спасибо, что помогли мне понять разницу.   -  person FIFA oneterahertz    schedule 30.03.2016