Я хочу преобразовать входной поток в массив байтов. Я знаю, что могу использовать IOUtils из сообщества. Но я практикую некоторые основы в java io. Я прочитал xml-файл с использованием BufferedReader и попытался записать его в ByteArrayOutputStream с помощью BufferedWriter. Но это не работает.BufferedWriter не пишет ByteArrayOutputStream
Когда я пишу непосредственно в ByteArrayOutputStream, он работает. Что не так в моем коде?
try (InputStream inputStream = getClass().getResourceAsStream(
"/productInventory.xml");
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(
new OutputStreamWriter(arrayOutputStream));
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(inputStream));) {
String line = "";
while ((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line);
}
System.out.println(arrayOutputStream.size());
} catch (IOException e) {
e.printStackTrace();
}
Когда я включаю ниже линии в цикле его рабочего
arrayOutputStream.write(line.getBytes(), 0, line.getBytes().length);
Что неправильно при использовании BufferedWriter?
Или сделать последнее автоматически с помощью инструкции try-with-resources. –
Я назвал flush(). Оно работало завораживающе. Размер моего файла - 6k. Вы сказали, что размер по умолчанию - 8k. Так что, если у меня есть файл из 10k, и я не называю flush(). Будет ли он писать первые 8k в ByteArrayOutputStream? –
Нет, он выполнит две записи - одну запись 8k при заполнении буфера и вторую запись 2k, когда вы вызываете 'flush()' - (Или, 'close()', что является лучшей практикой) – torquestomp