Вот варианты применения этих методов. Когда какой использовать и чем они отличаются?
try {
OutputStream fos = mContext.openFileOutput(FILE_DataRate, Context.MODE_PRIVATE);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(answer);
os.close();
} catch (Exception e) {}
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(sdFile));
bw.write("Содержимое файла на SD");
bw.close();
} catch (IOException e) {}
FileWriter fstream = new FileWriter(file_location_string);
BufferedWriter out = new BufferedWriter(fstream);
out.write("something");
Как я прочитал, FileOutputStream
больше подходит для записи потоков необработанных байтов, таких как данные изображения. Для записи потоков символов рассмотрите возможность использования FileWriter
.
И еще остается узнать насчет BufferedWriter
.
Например, я заметил, что OutputStream
не принимает на вход тип File
Напишу коротко:
InputStram
/OutputStream
- потоки читающие, пишущие байты. Читать и писать они могут все, т.к. все записано в байтах.
Reader
/Writer
- потоки обертки над InputStram
/OutputStream
. Читают и пишут символы (в символе может быть несколько байт).
Если посмотреть исходники реализаций (FileWriter
в вашем случае), то можно увидеть создание FileOutputStream
:
public FileWriter(String fileName) throws IOException {
super(new FileOutputStream(fileName));
}
BufferedReader
/BufferedWriter
- наследник Reader
/Writer
добавляющий методы чтения и записи целых строк, а не отдельных символов.
Опять же если посмотреть исходники, то этот класс принимает в конструктор Writer
объект:
public BufferedWriter(Writer out)
ObjectInputStream
/ObjectOutputStream
- наследники и обертки InputStram
/OutputStream
. Предназначены для записи объектов в оборачиваемые потоки.
public ObjectOutputStream(OutputStream out)
Разница между ObjectOutputStream
и BufferedWriter
в том, что первый пишет объект в понятном для компьютера и java формате(не читаемом для человека), а второй пишет строки т.е. вы можете записать объект в удобном и читаемом для вас виде, но придется описать так же как его читать.
Ну если посмотреть внимательно, то второй и третий способ это суть один и тот же код, просто в третьем варианте вы записываете в FileWriter в отдельную переменную, а во-втором нет, то есть
FileWriter fstream = new FileWriter(file_location_string);
BufferedWriter out = new BufferedWriter(fstream);
out.write("something");
превращается в
BufferedWriter out = new BufferedWriter(new FileWriter(sdFile));
out.write("something");
а это как раз вариант номер 2.
Значит весь вопрос только в чем отличие BufferedWriter
от ObjectOutputStream
. И тут нам приходит на помощь javadoc.
BufferedWriter
- Writes text to a character-output stream, buffering characters so as to provide for the efficient writing of
single characters, arrays, and strings.
An ObjectOutputStream
writes primitive data types and graphs of Java
objects to an OutputStream
. The objects can be read (reconstituted)
using an ObjectInputStream
.
То есть BufferedWriter
умеет записывать только строки или символы, а ObjectOutputStream
записывает любые примитивные типы и сериализированные объекты.
Соответственно, BufferedWriter
используется для записи обычных текстовых файлов, а ObjectOutputStream
для записи бинарного представления объектов Java (сериализации), на выходе будет совсем разный тип файлом и принимают они совсем разные сущности для записи.
Если вы откроете файл, записанный с помощью ObjectOutputStream
в любом текстовом редакторе, то скорее всего среди обычного текста вы увидите бинарные символы (даже если писали только текст), а с помощью BufferedWriter
вы ничего, кроме текста, по большому счету, записать не сможете.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть несколько классов объекты которых должны создаваться спрингом:
Есть проблема с одной олимпиадной задачей, но решить мне её нужно на 100Задача находится https://www