Почему байты, написанные 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()
когда ты закончил. Нет необходимости записывать его в файл, который вы должны прочитать обратно.