dumme fragen zu ... dateien?



  • ich möchte einen string in bytes umwandeln, eig sollte das doch per
    string.getbytes() klappen,
    ich möchte nun aber sicher gehn dass das erzeugte array eine exakte größe hat

    wie kann ich das erreichen?
    es geht vor allem darum wenn ich einen zu kleinen string habe



  • warum willst du die größe des arrays überprüfen, und womit willst du die dann vergleichen :?



  • ich möchte an den mp3 tags herumspielen
    und da ist die länge eines tags fest vorgegeben, also muss ich mich da anpassen

    nebenbei:wie kann ich in eine textdatei einen zeilenumbruch schreiben?
    out.write(10) klappt nicht



  • \n

    😕



  • ja das war nichzt meine schuld der editor von microsoft hat die leerzeichen einfach nicht angezeigt^^

    aber das andere problem hab ich noch:

    string in byte festgegebener größe zu verwandeln



  • ich hab jetz ein wenig herumgespielt und hier ist das was mir sorgen bereitet:

    String s = "Ich du er sie es";
    		String small = "kleiner";
    		String result;
    		byte[] b , tmp;
    
    		//System.out.println(s.length());
    
    		try
    		{
    			tmp = small.getBytes("US-ASCII");
    			b = s.getBytes("US-ASCII");
    			System.out.println(b.length);
    			b = small.getBytes("US-ASCII");
    			System.out.println(b.length);
    
    			result = new String(b);
    			System.out.println(result);
    			result = new String(tmp);
    			System.out.println(result);
    
    			System.out.println(b);
    			System.out.println(b.length);
    			System.out.println(tmp);
    			System.out.println(tmp.length);
    		}
    

    b und tmp beinhalten am Schluss den selben String und haben die selbe Länge.
    Aber was ist mit dem Rest von String s in b ?
    b und tmp unterscheiden sich anscheinend doch.

    ich kann leider nicht viel damit anfangen und bitte um aufklärung



  • nun bin ich vollends verwirrt:

    package bt;
    
    import java.io.*;
    
    public class Bytes 
    {
    	public static void main(String[] args)
    	{
    		byte[] b1, b2;
    		String big = "langerstring";
    		String small = "kleiner";
    
    		try
    		{
    			b1 = small.getBytes("US-ASCII");
    			b2 = small.getBytes("US-ASCII");
    
    			System.out.println(b1);
    			System.out.println(b2);
    		}
    		catch(Exception e){}
    
    	}
    }
    

    führt zu:

    [B@addbf1
    [B@42e816

    wieso erzeugt das programm 2 verschiedene ausgaben?
    ich nehme doch den selben string auf die selbe art und weise ran...





  • würdest du mir erklären was damit genau gemeint ist.
    zwar kann ich das übersetzen aber ich verstehe es noch nicht so recht.

    getClass().getName() + '@' + Integer.toHexString(hashCode())

    in beiden fällen habe ich doch die selbe klasse "byte"
    das würde das [B@ erkären das ich als ausgabe erhalte
    aber der hash-code sollte doch auch gleich sein?!

    Also ich bin wirklich schwer von begriff aber ich bräuchte des wirklich mal erklärt.

    Meine idee: vielleicht spielt die speicheradresse eine rolle? die unterscheidet sich ja auf jeden fall.



  • Hallo,

    shisha schrieb:

    ...vielleicht spielt die speicheradresse eine rolle? die unterscheidet sich ja auf jeden fall.

    Das könnte sein, denn:

    As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)

    Siehe http://java.sun.com/javase/6/docs/api/java/lang/Object.html#hashCode()

    MfG,

    Probe-Nutzer



  • ein kleines problem:

    ich habe einen String "blabla"
    den ich in eine randomaccessfile schreiben möchte:

    RandomAccessFile out = new RandomAccessFile("out.txt","rw");
    out.writeChars("blabla");

    nun habe ich 2 probleme dabei:+

    1. wenn ich den modus der datei in "w" ändere tut sich gar nichts, wieso auch immer.

    2. in der dtaei stehen sonderbarerweise immer \0 zwischen allen zeichen, wenn ich writeUTF verwende habe ich zwar das nicht mehr, aber ein sonderzeichen am anfang, das ich nicht haben möchte



  • Hallo,

    schon wieder Fragen, die sich allein durch die Doku beantworten lassen, die solltest du unbedingt auch nutzen:

    1. "w" ist nicht erlaubt! Siehe http://java.sun.com/javase/6/docs/api/java/io/RandomAccessFile.html#RandomAccessFile(java.lang.String,%20java.lang.String)

    2. das ist ok, denn es werden Unicode-Zeichen geschrieben: Siehe http://java.sun.com/javase/6/docs/api/java/io/RandomAccessFile.html#writeChar(int)

    Warum's bei writeUTF auch etwas "komisch" ist, steht auch dort

    MfG,

    Probe-Nutzer



  • ich habe zumindest bei utf herausgefunden woran es liegt, was bei unicode zeichen so besonders ist verschließt sich im moment auch noch,

    das ist aber nicht das problem an sich:

    wie umgehe ich es?

    ich finde keine funktion die mir einfach den string reinschreibt, bei normalen filewritern ging das eigentlich wenn ich mich recht erinnere, warum bei rafs nicht?

    oder besser gefragt:
    nicht wieso klappts nicht, sondern wie erreiche ich mein ziel?



  • weil mir kein anderer weg einfiel hab ich jetz die bytes geschrieben in der von mir gewünschten us-ascii formatierung, aber gehts nicht einfacher?



  • Wenn du unbedingt ASCII schreiben musst, und du willst bei RAFs bleiben, dann sind die ...Byte-Methoden geeignet. Ansonsten kannst du auch auf FileInputStream und FileOutputStream (das sind Byte-Streams) ausweichen.

    MfG,

    Probe-Nutzer


Anmelden zum Antworten