Каков наилучший способ передать вывод из 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();
}
}
Но есть ли лучший способ? Я только хочу запустить тест!
Ответы:
Я бы использовал
ByteArrayOutputStream
. А на финише вы можете позвонить:или лучше:
Для
String
конструктора этоcodepage
может бытьString
или экземпляр java.nio.charset.Charset . Возможное значение: java.nio.charset.StandardCharsets.UTF_8 .Метод
toString()
принимает только aString
в качествеcodepage
параметра (стенд Java 8).источник
defaultCharset
не лучше, чем полное игнорирование кодировки - вам нужно выяснить, что это такое, прежде чем использоватьtoString
StandardCharsets.UTF_8
этоCharset
, а неString
. Причем параметр называетсяcharsetName
, а неcodepage
.Мне нравится библиотека Apache Commons IO. Взгляните на его версию ByteArrayOutputStream , которая также имеет
toString(String enc)
методtoByteArray()
. Использование существующих и надежных компонентов, таких как проект Commons, позволяет уменьшить размер вашего кода и облегчить его расширение и перепрофилирование.источник
Это сработало
вызов метода = >>
marshaller.marshal( (Object) toWrite , (OutputStream) output);
затем напечатать строку или получить ее, просто ссылаясь на сам поток «output». Например, вывести строку в console = >>
System.out.println(output);
К вашему сведению: мой метод вызова
marshaller.marshal(Object,Outputstream)
для работы с XML. Это не имеет отношения к этой теме.Это очень расточительно для производственного использования, существует слишком много конверсии, и она немного неэффективна. Это было просто закодировано, чтобы доказать вам, что вполне возможно создать собственный OuputStream и вывести строку. Но просто идите Horcrux7, и все хорошо, всего лишь два вызова метода.
И мир живет в другой день ....
источник
Вот что я в итоге сделал:
Где ОС это
ByteArrayOutputStream
.источник
"UTF-8"
наStandardCharsets.UTF_8
.Java 14 - https://docs.oracle.com/
источник