Получить OutputStream в строку

Какой лучший способ передать вывод из java.io.OutputStream в String в Java?

Скажем, у меня есть метод:

  writeToStream(Object o, OutputStream out)

который записывает определенные данные из объекта в данный поток. Тем не менее, я хочу как можно проще получить этот вывод в String.

Я подумываю написать такой класс (непроверенный):

class StringOutputStream extends OutputStream {

  StringBuilder mBuf;

  public void write(int byte) throws IOException {
    mBuf.append((char) byte);
  }

  public String getString() {
    return mBuf.toString();
  }
}

Но есть ли лучший способ? Я хочу только запустить тест!

+544
19 окт. '08 в 20:03
источник поделиться
5 ответов

Я бы использовал ByteArrayOutputStream. А на финише вы можете позвонить:

new String( baos.toByteArray(), codepage );

или лучше:

baos.toString( codepage );

Для конструктора String codepage может быть String или экземпляром java.nio.charset.Charset. Возможное значение: java.nio.charset.StandardCharsets.UTF_8.

Метод toString() принимает только String в качестве параметра codepage (стенд Java 8).

+574
19 окт. '08 в 20:15
источник

Связанные вопросы


Похожие вопросы

Мне нравится библиотека Apache Commons IO. Взгляните на его версию ByteArrayOutputStream, которая имеет метод toString(String enc) а также toByteArray(). Использование существующих и надежных компонентов, таких как проект Commons, позволяет уменьшить размер вашего кода и облегчить его расширение и перепрофилирование.

+44
19 окт. '08 в 20:23
источник

Это хорошо работало

    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();
        }
    };

method call =>> marshaller.marshal( (Object) toWrite, (OutputStream) output);

затем напечатать строку или получить ее просто ссылку на "выходной" поток. Например, чтобы напечатать строку на консоли =>> System.out.println(output);

FYI: мой метод call marshaller.marshal(Object,Outputstream) предназначен для работы с XML. Это не относится к этой теме.

Это очень расточительно для производственного использования, существует слишком много конверсий, и он немного свободен. Это было просто закодировано, чтобы доказать вам, что вполне возможно создать пользовательский OuputStream и вывести строку. Но просто пойдите в Horcrux7, и все хорошо с двумя вызовами метода.

И мир живет в другой день....

+22
20 июн. '09 в 20:13
источник

Вот что я в итоге сделал:

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());
}

Где os - ByteArrayOutputStream.

+13
03 нояб. '08 в 21:04
источник

Почему вы не используете ByteArrayOutputStream? Это то, что вы должны использовать для этой цели.

-12
02 авг. '13 в 9:05
источник

Посмотрите другие вопросы по меткам или Задайте вопрос