RogerJFX
24-05-2005, 17:55
Leute, das muß ich einfach hier platzieren. Das ist zu lustig.
Klar, uchar gibt es in Java nicht. Braucht man an sich auch nicht. Ich hatte nur irgendwann das f... Problem, daß ich es mit einem Server zu tun hatte, der grundsätzlich Daten junked rausgeworfen hat. Heißt: ne Content-Length hatte ich nicht. Und wie groß ich einen Buffer anlegen sollte, war mir auch nicht klar. Also habe ich alles, was kam, in einen StringBuffer geworfen und habe das dann einfach zum Schluß als String weitergegeben. Sollte das dann ein byteArray sein, alles klar, dann eben String.getBytes(). Also z.B. PNG-Images lese ich genau so.
In MicroEdition geht das auch alles. Aber eben nicht in J2SE.
Es bleibt dabei:
...
int ch;
StringBuffer buffer = new StringBuffer();
while ( (ch = in.read()) != -1 && !noMoreWaiting) {
buffer.append( (char) ch);
}
return buffer.toString();
Ist auch kein Problem, sollte Text übermittelt. Aber bei einem PNG geht String.getBytes() eben nicht, wohl wegen irgendwelcher Locales.
Was aber geht (zum Kringeln, in der Tat):
char[] data = String.toCharArray();
Der Witz: negative (byte) chars bleiben so erhalten. Und die kann ich ja dann zu ints konvertieren. Z.B.
char[] chData = myString.toCharArray();
File tmpF = new File(System.getProperty("user.home") + "/~jfx_tmp.png");
try {
DataOutputStream out = new DataOutputStream(new FileOutputStream(tmpF));
for (int i = 0; i < chData.length; i++) {
int b = (byte) chData[i] >= 0 ? (byte) chData[i] : (byte) chData[i] + 256;
out.write(b); // ints werden hier geschrieben...
}
out.flush();
out.close();
...
Und das PNG befindet sich auf der Festplatte.
Also ich find's komisch.
Ach so, bleibt vielleicht zu erwähnen, daß man das bei großen Dateien besser nicht macht. Zeichenweises Einlesen ist nicht besonders performant, in der Tat.
Cheers,
Roger
Klar, uchar gibt es in Java nicht. Braucht man an sich auch nicht. Ich hatte nur irgendwann das f... Problem, daß ich es mit einem Server zu tun hatte, der grundsätzlich Daten junked rausgeworfen hat. Heißt: ne Content-Length hatte ich nicht. Und wie groß ich einen Buffer anlegen sollte, war mir auch nicht klar. Also habe ich alles, was kam, in einen StringBuffer geworfen und habe das dann einfach zum Schluß als String weitergegeben. Sollte das dann ein byteArray sein, alles klar, dann eben String.getBytes(). Also z.B. PNG-Images lese ich genau so.
In MicroEdition geht das auch alles. Aber eben nicht in J2SE.
Es bleibt dabei:
...
int ch;
StringBuffer buffer = new StringBuffer();
while ( (ch = in.read()) != -1 && !noMoreWaiting) {
buffer.append( (char) ch);
}
return buffer.toString();
Ist auch kein Problem, sollte Text übermittelt. Aber bei einem PNG geht String.getBytes() eben nicht, wohl wegen irgendwelcher Locales.
Was aber geht (zum Kringeln, in der Tat):
char[] data = String.toCharArray();
Der Witz: negative (byte) chars bleiben so erhalten. Und die kann ich ja dann zu ints konvertieren. Z.B.
char[] chData = myString.toCharArray();
File tmpF = new File(System.getProperty("user.home") + "/~jfx_tmp.png");
try {
DataOutputStream out = new DataOutputStream(new FileOutputStream(tmpF));
for (int i = 0; i < chData.length; i++) {
int b = (byte) chData[i] >= 0 ? (byte) chData[i] : (byte) chData[i] + 256;
out.write(b); // ints werden hier geschrieben...
}
out.flush();
out.close();
...
Und das PNG befindet sich auf der Festplatte.
Also ich find's komisch.
Ach so, bleibt vielleicht zu erwähnen, daß man das bei großen Dateien besser nicht macht. Zeichenweises Einlesen ist nicht besonders performant, in der Tat.
Cheers,
Roger