Quelle est la meilleure façon de diriger la sortie d'un java.io.OutputStream vers une chaîne en Java?
Disons que j'ai la méthode:
writeToStream(Object o, OutputStream out)
Qui écrit certaines données de l'objet dans le flux donné. Cependant, je veux obtenir cette sortie dans une chaîne aussi facilement que possible.
J'envisage d'écrire un cours comme celui-ci (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 y a-t-il une meilleure façon? Je veux seulement faire un test!
Réponses:
J'utiliserais un
ByteArrayOutputStream
. Et à la fin, vous pouvez appeler:ou mieux:
Pour le
String
constructeur, lecodepage
peut être unString
ou une instance de java.nio.charset.Charset . Une valeur possible est java.nio.charset.StandardCharsets.UTF_8 .La méthode
toString()
accepte uniquement unString
commecodepage
paramètre (stand Java 8).la source
defaultCharset
n'est pas mieux que d'ignorer complètement le jeu de caractères - vous devez savoir ce que c'est avant d'utilisertoString
StandardCharsets.UTF_8
est unCharset
, pas unString
. De plus, le paramètre est appelécharsetName
, noncodepage
.J'aime la bibliothèque IO Apache Commons. Jetez un œil à sa version de ByteArrayOutputStream , qui a également une
toString(String enc)
méthodetoByteArray()
. L'utilisation de composants existants et fiables comme le projet Commons permet à votre code d'être plus petit et plus facile à étendre et à réutiliser.la source
Cela a bien fonctionné
appel de méthode = >>
marshaller.marshal( (Object) toWrite , (OutputStream) output);
puis pour imprimer la chaîne ou la récupérer simplement référencer le flux "de sortie" lui-même. Par exemple, pour imprimer la chaîne sur console = >>
System.out.println(output);
FYI: mon appel de méthode
marshaller.marshal(Object,Outputstream)
est pour travailler avec XML. Cela n'a aucun rapport avec ce sujet.C'est très gaspillant pour un usage de production, il y a beaucoup trop de conversion et c'est un peu lâche. Cela vient d'être codé pour vous prouver qu'il est totalement possible de créer un OuputStream personnalisé et de sortir une chaîne. Mais allez simplement dans Horcrux7 et tout va bien avec seulement deux appels de méthode.
Et le monde vit un autre jour ...
la source
Voici ce que j'ai fini par faire:
Où os est un
ByteArrayOutputStream
.la source
"UTF-8"
parStandardCharsets.UTF_8
.Java 14 - https://docs.oracle.com/
la source