Почему байты, написанные writeByte() из DataOutputStream и writeByte() из ObjectOutputStream, отличаются?

Поскольку цель writeByte() одинакова в обоих классах. Но оба пишут разное содержание.

import java.io.*;
class First
{
        public static void main(String[] args) throws IOException
        {
                FileOutputStream fos = new FileOutputStream("b.txt");
Line 1:         ObjectOutputStream oos = new ObjectOutputStream(fos);
Line 2:         DataOutputStream oos = new DataOutputStream(fos);
                oos.writeByte(65);
                oos.close();
                FileInputStream fis = new FileInputStream("b.txt");
                int x=0;
                System.out.println("Output");
                while((x=fis.read())!=-1)
                {
                        System.out.println(x);
                }
                fis.close();
        }
}

Если строка 1 закомментирована, вывод:

65

Если строка 2 закомментирована, вывод:

172
237
0
5
119
1
65

Почему эта разница?

1 ответ

Объектные потоки предназначены для записи объектов. Это означает, что он имеет информацию о форматировании, чтобы сказать, что вы написали, а также данные, которые вы написали. У Object Streams также есть заголовок в начале, который проверяет, что данные являются Object Stream.

Потоки данных записывают только те данные, которые вы запрашивали. Там нет никакой дополнительной информации.

Кстати, если вы хотите увидеть, что записано в поток, вы можете написать в ByteArrayOutputStream и позвонить toByteArray() когда ты закончил. Нет необходимости записывать его в файл, который вы должны прочитать обратно.

Другие вопросы по тегам