Konvertieren Sie den Inhalt eines ByteArrayInputStream in einen String
-
26-12-2019 - |
Frage
ich lese dieser Beitrag aber ich folge nicht.Ich habe gesehen Das habe aber kein richtiges Beispiel für die Konvertierung von a gesehen ByteArrayInputStream
Zu String
Verwendung einer ByteArrayOutputStream
.
Um den Inhalt von a abzurufen ByteArrayInputStream
Als ein String
, verwendet a ByteArrayOutputstream
empfohlen oder gibt es einen günstigeren Weg?
Ich habe darüber nachgedacht dieses Beispiel und verlängern ByteArrayInputStream
und nutzen Sie a Dekorateur um die Funktionalität zur Laufzeit zu erhöhen.Irgendein Interesse daran, dass dies eine bessere Lösung für die Beschäftigung eines ist ByteArrayOutputStream
?
Lösung
A ByteArrayOutputStream
kann von jedem lesen InputStream
und am Ende ergibt sich a byte[]
.
Allerdings mit a ByteArrayInputStream
es ist einfacher:
int n = in.available();
byte[] bytes = new byte[n];
in.read(bytes, 0, n);
String s = new String(bytes, StandardCharsets.UTF_8); // Or any encoding.
Für ein ByteArrayInputStream
available()
ergibt die Gesamtzahl der Bytes.
Antwort auf Kommentar:mit ByteArrayOutputStream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[8192];
for (;;) {
int nread = in.read(buf, 0, buf.length);
if (nread <= 0) {
break;
}
baos.write(buf, 0, nread);
}
in.close();
baos.close();
byte[] bytes = baos.toByteArray();
Hier kann ein beliebiger InputStream vorhanden sein.
Andere Tipps
Warum hat niemand erwähnt? org.apache.commons.io.IOUtils
?
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;
String result = IOUtils.toString(in, StandardCharsets.UTF_8);
Nur eine Zeile Code.
Verwenden Scanner
und übergeben Sie es an seinen Konstruktor ByteArrayInputStream
Lesen Sie dann die Daten von Ihrem Scanner. Sehen Sie sich dieses Beispiel an:
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(new byte[] { 65, 80 });
Scanner scanner = new Scanner(arrayInputStream);
scanner.useDelimiter("\\Z");//To read all scanner content in one String
String data = "";
if (scanner.hasNext())
data = scanner.next();
System.out.println(data);
Verwenden Sie die Base64-Kodierung
Angenommen, Sie haben Ihren ByteArrayOutputStream:
ByteArrayOutputStream baos =...
String s = new String(Base64.Encoder.encode(baos.toByteArray()));
Sehen http://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html