Получить OutputStream в строку
каков наилучший способ передать вывод из 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();
}
}
но есть ли лучший способ? Я только хочу провести тест!
4 ответов:
Я бы использовал
ByteArrayOutputStream. А на финише можно позвонить:new String( baos.toByteArray(), codepage );или лучше
baos.toString( codepage );в строке конструктора
codepageможет быть строкой или экземпляр java.НИО.кодировка.Символов. Возможное значение 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 Например, чтобы вывести строку на консоль =>>
System.out.println(output);FYI: мой вызов метода
marshaller.marshal(Object,Outputstream)для работы с XML. Это не имеет отношения к данной теме.Это очень расточительно для производственного использования, есть слишком много преобразования, и это немного свободно. Это было просто закодировано, чтобы доказать вам что вполне возможно создать пользовательский поток вывода и вывести строку. Но просто пойти 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.
Comments