Как получить OutputStream в String?
Вопрос: Как лучшим образом перенаправить вывод из java.io.OutputStream в String на 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();
}
}
Но есть ли более лучший способ? Мне нужно просто запустить тест!
2 ответ(ов)
Это сработало отлично
OutputStream output = new OutputStream() {
private StringBuilder string = new StringBuilder();
@Override
public void write(int b) throws IOException {
this.string.append((char) b );
}
// Netbeans IDE автоматически переопределяет этот метод toString()
public String toString() {
return this.string.toString();
}
};
Вызов метода → marshaller.marshal( (Object) toWrite , (OutputStream) output);
Чтобы распечатать строку или получить её, просто обратитесь к самому "output" потоку. Например, чтобы вывести строку в консоль → System.out.println(output);
Для справки: мой вызов метода marshaller.marshal(Object, OutputStream)
предназначен для работы с XML. Это не имеет отношения к этой теме.
Стоит отметить, что данный подход крайне неэффективен для использования в продакшене, поскольку здесь происходит слишком много преобразований, и в целом это несколько небрежно. Я продемонстрировал это только для того, чтобы показать, что действительно возможно создать пользовательский OutputStream и выводить строку. Но лучше воспользоваться способом Horcrux7, и всё будет просто с двумя вызовами методов.
И мир живёт дальше...
Вот что я в итоге сделал:
Obj.writeToStream(toWrite, os);
try {
String out = new String(os.toByteArray(), "UTF-8");
assertTrue(out.contains("testString"));
} catch (UnsupportedEncodingException e) {
fail("Поймана исключительная ситуация: " + e.getMessage());
}
Где os
— это объект ByteArrayOutputStream
.
Как прочитать/конвертировать InputStream в строку в Java?
Как создать строку Java из содержимого файла?
Как преобразовать строку в int в Java?
Как сгенерировать случайную алфавитно-цифровую строку
Как преобразовать символ в строку?