java: FileInputStream.read() читает байт, но может читать char, почему?

Я тестирую FileInputStream, чтобы прочитать текст файла (dulo.txt), текст в файле (в ANSI):

Здравствуй, мир!

Я использовал метод FileInputStream.read(), насколько я знаю, read() может читать только следующий байт, а поскольку char имеет 2 байта, как может программа работает? Разве он не должен рухнуть?

Это мой код:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;



class Collections {
  public static void main(String args[]) throws IOException {
      FileInputStream fis= new FileInputStream(new File("dulO.txt"));

      int spazioByte=fis.available();

      for(int i=0; i<spazioByte;i++){
          System.out.println("Byte: "+i+" :"+(char)fis.read());
      }



  }
}

Вывод консоли:

Byte: 0 :H
Byte: 1 :E
Byte: 2 :L
Byte: 3 :L
Byte: 4 :O
Byte: 5 : 
Byte: 6 :W
Byte: 7 :O
Byte: 8 :R
Byte: 9 :L
Byte: 10 :D

person Luther    schedule 04.07.2013    source источник
comment
Это зависит от кодировки вашего файла. Что это такое? Я думаю, ASCII или UTF-8...   -  person jlordo    schedule 05.07.2013
comment
Если не указано иное, файлы .txt имеют кодировку ANSI, то есть 8 бит (1 байт) на символ.   -  person Achrome    schedule 05.07.2013
comment
да, я сохранил его в ANSI   -  person Luther    schedule 05.07.2013


Ответы (2)


Char — это 1 байт в формате, отличном от юникода. Формат ASCII, например, представляет char только с 1 байтом.

person Avi    schedule 04.07.2013
comment
На самом деле, ASCII — это 7 бит. ANSI, с другой стороны, является 8-битной и более распространенной кодировкой по умолчанию для текстовых файлов. - person Achrome; 05.07.2013
comment
@AshwinMukhija - признаюсь, я думал, что ASCII - это 8 бит. Тем не менее, мой ответ все еще актуален :) - person Avi; 05.07.2013
comment
ASCII поддерживает только 128 символов, что делает его 7-битным. ANSI поддерживает 256 символов. Ваш ответ актуален, да. :) - person Achrome; 05.07.2013

если вы хотите читать/записывать символы из файла, вы можете использовать Reader/Writer. Ниже я покажу простой пример использования Reader

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class TestReader {

private final static int SIZE = 200;

       public static void main(String[] args) throws IOException {
            Reader reader = new FileReader("1.txt");

            char[] buf = new char[SIZE];
            int count;
            while((count = reader.read(buf)) != -1) {
                for (int i = 0; i < count; i++)
                    System.out.println(buf[i]);
            }
            reader.close();
        }
   }
person jwriter    schedule 15.03.2014