647 votes

Obtenir un OutputStream dans une Chaîne

Quelle est la meilleure façon de tuyau de la sortie d'un java.io.OutputStream à une Chaîne de caractères en Java?

Dire que j'ai de la méthode:

  writeToStream(Object o, OutputStream out)

Qui enregistre certaines données à partir de l'objet de la filière donnée. Cependant, je veux obtenir ce résultat dans une Chaîne aussi facilement que possible.

J'envisage l'écriture d'une classe comme ceci (non testé):

class StringOutputStream extends OutputStream {

  StringBuilder mBuf;

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

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

Mais est-il une meilleure façon? Je ne veux exécuter un test!

678voto

Horcrux7 Points 8369

Je voudrais utiliser un ByteArrayOutputStream. Et sur la finition, vous pouvez appeler:

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

ou mieux

baos.toString( codepage );

52voto

Joe Liversedge Points 2134

J'aime l'Apache Commons IO bibliothèque. Prendre un coup d'oeil à sa version de ByteArrayOutputStream, qui a un toString(String enc) méthode de ainsi que toByteArray(). À l'aide existants et de confiance des composants comme le projet de mise en commun permet à votre code sera plus petit et plus facile à étendre et de le réutiliser. Bonne chance.

18voto

Adrian Mouat Points 5533

Voici ce que j'ai fait:

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

Où l'os est un ByteArrayOutputStream.

-12voto

user2645256 Points 37

Pourquoi n'utilisez-vous pas un ByteArrayOutputStream? C'est ce que vous êtes supposé utiliser à cette fin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X