Получить 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();
}
}


но есть ли лучший способ? Я только хочу провести тест!

614   4  

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

    Ничего не найдено.