Получить OutputStream в строку
каков наилучший способ передать вывод из java.Ио.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();
}
}
но есть ли лучший способ? Я только хочу провести тест!
4 ответов
Я бы использовал ByteArrayOutputStream
. А на финише можно позвонить:
new String( baos.toByteArray(), codepage );
или лучше
baos.toString( codepage );
в строке конструктора codepage
может быть строкой или экземпляр java.НИО.кодировка.Charset. Возможное значение java.НИО.кодировка.StandardCharsets.UTF_8.
метод toString принимает только строку как codepage
параметр (стенд Java 8).
мне нравится библиотека Apache Commons IO. Взгляните на его версию ByteArrayOutputStream, которая имеет toString(String enc)
и toByteArray()
. Использование существующих и надежных компонентов, таких как проект Commons, позволяет вашему коду быть меньше и легче расширяться и перепрофилироваться. Удача.
это сработало хорошо
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);
FYI: мой метод вызова marshaller.marshal(Object,Outputstream)
для работы с XML. Это не имеет отношения к данной теме.
Это очень расточительно для производственного использования, слишком много конверсий, и это немного свободно. Это было закодировано, чтобы доказать тебе. что вполне возможно создать пользовательский OuputStream и вывести строку. Но просто идите Horcrux7, и все хорошо только с двумя вызовами метода.
а мир живет в другой день....
вот что я делал:
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
.