Datentypen FileOutputStream#write(int) mit ints?

Status
Nicht offen für weitere Antworten.

hdi

Top Contributor
Hi, folgendes Problem: Wenn ich sowas mache wie
Java:
int i = 19;
myOutPutStream.write(i);
dann steht in meiner Output Datei irgendein komisches Zeichen, aber nicht die Zahl als Zeichen. Ich müsste sie entsprechend ihrem ASCII Zeichenwert übergeben (also 48 für 0, 49 für 1 usw).
Aber ich rechne mit der Zahl, und sie kann halt eben auch mehrstellig sein.

...wie krieg ich denn ne Zahl damit in meine Datei? Ich hab versucht sie nach char zu casten, bringt aber auch nichts.. Integer bietet auch nur byteValue(), was auch net funktioniert.

???:L
 
Java:
os.write(String.valueOf(i).getBytes());

ist irgendwie total hässlich, zumal ja auch die Methode write(int i) in dem interface angegeben ist
 
Danke!

...finde das ganze auch ziemlich verwirrend. was genau ist der Unterschied zwischen byte und int? Bzw. was geschieht bei dieser Umwandlung zu String und dann getBytes()?
 
hm also das Ende meiner Aufruf kette endet in diesen 2 Methoden der Klasse StringCoding:
Java:
static byte[] encode(Charset cs, char[] ca, int off, int len) {
	StringEncoder se = new StringEncoder(cs, cs.name());
	char[] c = Arrays.copyOf(ca, ca.length);
	return se.encode(c, off, len);
}

//Aufruf durch getBytes in String-Klasse
static byte[] encode(char[] ca, int off, int len) {
	String csn = Charset.defaultCharset().name();
	try {
		return encode(csn, ca, off, len);
	} catch (UnsupportedEncodingException x) {
		warnUnsupportedCharset(csn);
	}
	
	try {
		return encode("ISO-8859-1", ca, off, len);
	} catch (UnsupportedEncodingException x) {
		// If this code is hit during VM initialization, MessageUtils is
		// the only way we will be able to get any kind of error message.
		MessageUtils.err("ISO-8859-1 charset not available: " + x.toString());
		// If we can not find ISO-8859-1 (a required encoding) then things
		// are seriously wrong with the installation.
		System.exit(1);
		return null;
	}
}

vielleicht kannst dir da was draus ableiten ^^

edit: für meine begriffe könnte es nur was mit dem charset zu tun haben. vielleicht wird da implizit ein anderes verwendet, wenn man nicht über die String-klasse geht.
 
Zuletzt bearbeitet:
Danke!

...finde das ganze auch ziemlich verwirrend. was genau ist der Unterschied zwischen byte und int? Bzw. was geschieht bei dieser Umwandlung zu String und dann getBytes()?
int ist größer als byte.
Bei der Umwandlung wird die 1 zu einem String. Mit getBytes() erhählt man dann den Byte Wert für den String 1. Somit speichert er in die Datei eine 49. Was laut Ascii Tabelle die 1 ist.

@hdi:
Muss die output Datei denn menschlich lesbar sein? Wenn nicht wäre es doch egal.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben