Java: accéder à une liste de chaînes en tant que InputStream
Est-il de toute façon InputStream
emballage une liste de UTF-8 String
? J'aimerais faire quelque chose comme:
InputStream in = new XyzInputStream( List<String> lines )
source d'informationauteur Marc Polizzi
Vous devez vous connecter pour publier un commentaire.
Vous pouvez concaténer toutes les lignes ensemble pour créer une Chaîne, puis de le convertir en un tableau d'octets à l'aide de
String#getBytes
et la passer dans ByteArrayInputStream. Cependant, ce n'est pas le moyen le plus efficace de le faire.Vous pouvez lire à partir d'un
ByteArrayOutputStream
et vous pouvez créer votre sourcebyte[]
tableau à l'aide d'unByteArrayInputStream
.Afin de créer le tableau comme suit:
Et la lecture de c'est aussi simple que:
Alternativement, en fonction de ce que vous essayez de faire, un
StringReader
peut-être mieux.En bref, non, il n'y a pas moyen de faire cela en utilisant les classes du JDK. Vous pouvez, cependant, de mettre en œuvre votre propre InputStream que la lecture d'une Liste de Chaînes de caractères.
EDIT: Dave Web a une réponse ci-dessus, je pense que c'est le chemin à parcourir. Si vous avez besoin d'une classe réutilisable, alors quelque chose comme cela pourrait faire:
Fondamentalement un adaptateur pour
ByteArrayInputStream
.vous pouvez aussi le faire de cette façon créer un Serializable Liste
Vous pouvez faire quelque chose de similaire à ceci:
https://commons.apache.org/sandbox/flatfile/xref/org/apache/commons/flatfile/util/ConcatenatedInputStream.html
Juste implémente la méthode read() de InputStream et a une liste de InputStreams c'est la concaténation. Une fois qu'il lit un EOF il commence la lecture à partir de la prochaine InputStream. Il suffit de convertir les Chaînes de caractères à ByteArrayInputStreams.