FileInputStream не читает правильное значение? - PullRequest
0 голосов
/ 15 октября 2018
public static void main(String[] args) {
        try {
            File f = new File("file.txt");
            f.createNewFile();
            OutputStream fos = new FileOutputStream(f);
            InputStream fis = new FileInputStream(f);


            fos.write(200);



            System.out.println(fis.read());


        } catch (Exception ex) {
            Logger.getLogger(MySimple.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

печатает 200, как и ожидалось.Однако, когда я пишу 2000, он читает 208. Могли бы вы объяснить, почему он так себя ведет?

1 Ответ

0 голосов
/ 15 октября 2018

Вызов метода fos.write(200); записывает байт данных.Когда вы пишете 200, он прекрасно сохраняет это в 8-битном значении.

Но когда вы пытаетесь записать 2000, он игнорирует все, что выше первых 8 бит.2000 в двоичном виде - 0111 1101 0000.Но так как старшие 4 бита потеряны, результирующее записанное значение равно 1101 0000 или 208 в десятичном виде.

Методы немного сбивают с толку, поскольку write() принимает целочисленное значение, а read() возвращает целочисленное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...