Получить OutputStream в строку
570172 просмотра
4 ответа
Каков наилучший способ передать вывод из java.io.OutputStream в строку в Java?
Скажем, у меня есть метод:
writeToStream(Object o, OutputStream out)
Который записывает определенные данные от объекта в данный поток. Тем не менее, я хочу получить этот вывод в строку как можно проще.
Я рассматриваю возможность написания такого класса (непроверенного):
class StringOutputStream extends OutputStream {
StringBuilder mBuf;
public void write(int byte) throws IOException {
mBuf.append((char) byte);
}
public String getString() {
return mBuf.toString();
}
}
Но есть ли лучший способ? Я только хочу запустить тест!
Автор: Adrian Mouat Источник Размещён: 24.07.2019 02:32Ответы (4)
574 плюса
Я бы использовал ByteArrayOutputStream
. А на финише вы можете позвонить:
new String( baos.toByteArray(), codepage );
или лучше:
baos.toString( codepage );
Для String
конструктора это codepage
может быть String
или экземпляр java.nio.charset.Charset . Возможное значение: java.nio.charset.StandardCharsets.UTF_8 .
Метод toString()
принимает только a String
в качестве codepage
параметра (стенд Java 8).
44 плюса
Мне нравится библиотека Apache Commons IO. Взгляните на его версию ByteArrayOutputStream , которая также имеет toString(String enc)
метод toByteArray()
. Использование существующих и надежных компонентов, таких как проект Commons, позволяет уменьшить размер вашего кода и облегчить его расширение и перепрофилирование.
22 плюса
Это сработало
OutputStream output = new OutputStream()
{
private StringBuilder string = new StringBuilder();
@Override
public void write(int b) throws IOException {
this.string.append((char) b );
}
//Netbeans IDE automatically overrides this toString()
public String toString(){
return this.string.toString();
}
};
вызов метода = >> marshaller.marshal( (Object) toWrite , (OutputStream) output);
затем распечатать строку или получить ее, просто ссылаясь на сам поток «output». Например, вывести строку в console = >> System.out.println(output);
К вашему сведению: мой метод вызова marshaller.marshal(Object,Outputstream)
для работы с XML. Это не имеет отношения к этой теме.
Это очень расточительно для производственного использования, существует слишком много конверсии, и она немного неэффективна. Это было просто закодировано, чтобы доказать вам, что вполне возможно создать собственный OuputStream и вывести строку. Но просто идите Horcrux7, и все хорошо, всего лишь два вызова метода.
И мир живет в другой день ....
Автор: alcardenas Размещён: 20.06.2009 08:1313 плюса
Вот что я в итоге сделал:
Obj.writeToStream(toWrite, os);
try {
String out = new String(os.toByteArray(), "UTF-8");
assertTrue(out.contains("testString"));
} catch (UnsupportedEncondingException e) {
fail("Caught exception: " + e.getMessage());
}
Где ОС это ByteArrayOutputStream
.
Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- string В чем разница между строкой и строкой в ??C #?
- string Почему в Ruby нет реального StringBuffer или StringIO?
- string Преобразовать строку в перечисление в C #
- string Самый эффективный способ объединения строк?
- io How to find out if a file exists in C# / .NET?
- io Легкий способ записи содержимого Java InputStream в OutputStream
- io Отправка того же, но модифицированного объекта через ObjectOutputStream
- io Получить OutputStream в строку
- stream Закрытие Java FileInputStream
- stream Как мне превратить строку в InputStreamReader в Java?
- stream Как мне прочитать / преобразовать InputStream в строку в Java?