Wie erstellt man einen InputStream aus einem String? [duplicate]

Lesezeit: 3 Minuten

Ich bin es nicht gewohnt, mit Streams in Java zu arbeiten – wie erstelle ich eine InputStream von einem String?

  • Wie werden Sie den aus String erstellten InputStream verwenden?

    – Mohamed Sanaulla

    19. April 2011 um 18:02 Uhr

Benutzer-Avatar
anubhava

Bitte schön:

InputStream is = new ByteArrayInputStream( myString.getBytes() );

Aktualisieren Für die Verwendung mit Multibyte-Unterstützung (danke an Aaron WaibelKommentar von ):

InputStream is = new ByteArrayInputStream(Charset.forName("UTF-16").encode(myString).array());

Bitte sehen ByteArrayInputStream Handbuch.

Es ist sicher, ein Zeichensatzargument in zu verwenden String#getBytes(Zeichensatz) Methode oben.

Nach JDK 7+ können Sie verwenden

java.nio.charset.StandardCharsets.UTF_16

anstelle der fest codierten Codierungszeichenfolge:

InputStream is = new ByteArrayInputStream(StandardCharsets.UTF_16.encode(myString).array());

  • Dies führt dazu, dass Zeichen mit ihrem ersten Byte als etwas anderes als 0x00 getrimmt werden, um genauer zu sein, sollten Sie dies tun InputStream is = new ByteArrayInputStream(Charset.forName("UTF-16").encode(myString()).array())

    – SE

    19. April 2011 um 17:58 Uhr


  • @ Aaron: Nein, String.getBytes() verwendet die Standardcodierung der Plattform (die hier die gewünschte sein kann oder auch nicht). Für mich ist dies UTF-8 (das alle Java-Strings codieren kann). Die richtige Antwort wäre “Geben Sie die gewünschte Codierung an”, nicht “UTF-16 verwenden”. Und Sie können es mit verwenden .getBytes(charsetName)müssen nicht explizit ein Charset-Objekt erstellen und den String in einen ByteBuffer codieren.

    – Paulo Ebermann

    19. April 2011 um 20:35 Uhr

  • Wie wäre es, String.getBytes nicht zu verwenden? Es weist eine Kopie der Zeichenfolge zu, daher ist es keine speichereffektive Lösung. Der Grund für die Verwendung von inputstream besteht normalerweise darin, zu vermeiden, dass eine Kopie eines großen Objekts im Speicher aufbewahrt wird

    – Vitamin

    19. Mai 2016 um 11:29 Uhr

  • Diese Antwort könnte aktualisiert werden, um sie zu erwähnen java.nio.charset.StandardCharsets.UTF_16.

    – Kevinarpe

    22. Dezember 2017 um 12:39 Uhr

  • Guter Vorschlag @kevinarpe, ich habe bearbeitet.

    – anubhava

    22. Dezember 2017 um 14:55 Uhr

Benutzer-Avatar
WhiteFang34

Sie könnten dies tun:

InputStream in = new ByteArrayInputStream(string.getBytes("UTF-8"));

Beachten Sie das UTF-8 Codierung. Sie sollten den Zeichensatz angeben, in den die Bytes codiert werden sollen. Es ist üblich zu wählen UTF-8 wenn Sie nicht ausdrücklich etwas anderes benötigen. Andernfalls erhalten Sie, wenn Sie nichts auswählen, die Standardkodierung, die je nach System variieren kann. Von dem JavaDoc:

Das Verhalten dieser Methode, wenn diese Zeichenfolge nicht im Standardzeichensatz codiert werden kann, ist nicht spezifiziert. Die CharsetEncoder-Klasse sollte verwendet werden, wenn mehr Kontrolle über den Codierungsprozess erforderlich ist.

InputStream in = new ByteArrayInputStream(yourstring.getBytes());

Java 7+

Es ist möglich, die zu nutzen StandardCharsets JDK-Klasse:

String str=...
InputStream is = new ByteArrayInputStream(StandardCharsets.UTF_16.encode(str).array());

Ab Java 7 können Sie das folgende Idiom verwenden:

String someString = "...";
InputStream is = new ByteArrayInputStream( someString.getBytes(StandardCharsets.UTF_8) );

Benutzer-Avatar
Vorburger

Anstelle von CharSet.forName ist die Verwendung von com.google.common.base.Charsets von Googles Guava (http://code.google.com/p/guava-libraries/wiki/StringsExplained#Charsets) etwas netter:

InputStream is = new ByteArrayInputStream( myString.getBytes(Charsets.UTF_8) );

Welchen CharSet Sie verwenden, hängt natürlich ganz davon ab, was Sie mit dem InputStream machen werden.

1335200cookie-checkWie erstellt man einen InputStream aus einem String? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy