Dienstag, Oktober 27th, 2009
Aus gegebenen Anlass ein schnelles Codesnippet welches in Java einen String in einen InputStream umwandelt:
String msg = "Hello World!";
ByteArrayInputStream stream = new ByteArrayInputStream(msg.getBytes());
No Comments
Category Coding | Tags: Tags: bytearrayinputstream, getbytes, inputstream, java, string,
Social Networks: Facebook, Twitter, Google Bookmarks, del.icio.us, StumbleUpon, Digg, Reddit, Posterous.
Dienstag, Oktober 20th, 2009
Über sowas stolpert man ja öfters, dass eine Java Klasse einen InputStream erwartet, man jedoch maximal einen OutputStream zur Hand hat. Wie kriegt man nun das eine in das andere? Es gibt da verschiedene Möglichkeiten, ich persönlich finde den Weg über die Byte Array Streams am schnellsten und einfachsten.
In dem folgenden Beispiel müssen wir ein Properties Objekt in einen InputStream verwandeln. Das Objekt bietet aber maximal die Möglichkeit einen OutputStream zu erstellen. Wenn wir nun nicht über den Zwischenschritt des Speicherns gehen wollen (oder die Properties on-the-fly erzeugt haben) müssen wir uns über folgenden Weg einen InputStream erzeugen.
Properties p = new Properties();
p.put("key", "value");
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
p.store(out, "");
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
ByteArrayInputStream und ByteArrayOutputStream sind jeweils Subklassen von InputStream und OutputStream. Deshalb können wir auch einer Funktion die explizit einen InputStream erwartet einfach unseren ByteArrayInputStream übergeben.
Was haben wir nun gemacht? Nun wir haben über die store() Methode der Properties Klasse die Daten in unser ByteArrayOutputStream Objekt geschrieben. Daraufhin können wir ein Objekt vom Typ ByteArrayInputStream erstellen welches gleich im Constructor einen ByteArray erwartet. Zum Glück bietet der ByteArrayOutputStream die Möglichkeit mittels toByteArray() seinen Inhalt direkt als ByteArray auszugeben. Und voilà haben wir einen OutputStream in einen InputStream gewandelt.
Daraus lässt sich natürlich auch noch eine nützliche konvertier Funktion basteln, welche aber an dieser Stelle den Rahmen des Posts sprengt (und meine Zeit auffrisst).
Wer sich über weitere Möglichkeiten des Umwandelns informieren möchte kann dies auf der Seite von Stephen Ostermiller machen.
No Comments
Category Coding | Tags: Tags: array, bytearrayinputstream, inputstream, java,
Social Networks: Facebook, Twitter, Google Bookmarks, del.icio.us, StumbleUpon, Digg, Reddit, Posterous.