как int автоматически конвертируется в char при работе с FileInputStream в Java - PullRequest
0 голосов
/ 01 июня 2018

Вот пример кода для файла копирования в Java.

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

class FileCopy {

    public static void main(String[] args) throws IOException {
        String in = "D:\\test.txt";
        String out = "D:\\test_dup.txt";
        int i = 0;
        try (FileInputStream fis = new FileInputStream(in);
                FileOutputStream fos = new FileOutputStream(out)) {
            int b;
            while ((b = fis.read()) != -1) {
                System.out.println(b + "....." + (char) b);
                fos.write(b);
                i++;
            }

        } catch (Exception e) {
            System.out.print(e);
        } finally {
            System.out.println("done" + i);
        }
    }
}

Содержимое файла "test.txt" - "Добро пожаловать".Когда я запускаю программу, контекст копируется во второй файл, и вывод программы

87.....W
101.....e
108.....l
99.....c
111.....o
109.....m
101.....e

Мы используем целое число для хранения пугающего результата, как происходит автоматическое преобразование из int в символ, когда мы записываем int в FileOutpurtStream?или где задокументировано это автоматическое преобразование, например, char в int при чтении и int в char при записи.

если FileInputStream.read метод читает байт данных за один раз, то почему возвращаетсятип int вместо байта.

1 Ответ

0 голосов
/ 01 июня 2018

write записывает байты.Так что это ожидаемо.

Когда он пишет, например, 87, он не записывает символы 8 и 7, он записывает байт со значением 87, который оказывается ASCII W.

...