Wie viele Bytes hat ein UTF Eintrag?

SMoeller

Mitglied
Hallo,
ich möchte mit der methode writeUTF der Klasse RandomAccessFile in eine txt Datei schreiben und muss für eine andere Methode wissen, wie groß z.B. ein Eintrag mit 30 Zeichen ist (vor dem String schreibt die Methode writeUTF noch die Länge des Eintrags). Allerdings weiß ich nicht genau, wie ich ausrechnen kann, wie viele Bytes ein Eintrag hat.
 
Hallo!

Das was du machen möchtest könnte man beispielsweise so machen:
Java:
/**
 * 
 */
package de.tutorials;

import java.io.File;
import java.io.RandomAccessFile;

/**
 * @author Tom
 * 
 */
public class UTFStringInRadomAccessFileExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        File file = new File("c:/ram.dat");
        RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
        String str = "YAAadhkj2189ljsaljöaüqwoßqwläöqwm.dmaAAX";
        byte[] bytes = str.getBytes("UTF-8");
        randomAccessFile.writeInt(bytes.length);
        randomAccessFile.write(bytes);
        randomAccessFile.close();

        randomAccessFile = new RandomAccessFile(file, "r");
        int bytesLength = randomAccessFile.readInt();
        byte[] buffer = new byte[bytesLength];
        randomAccessFile.read(buffer, 0, bytesLength);
        randomAccessFile.close();
        System.out.println(new String(buffer, "UTF-8"));
    }

}
-> Write bytes statt writeUTF verwenden. WriteUTF verwendet (laut Doku) ein leicht modifiziertes UTF-8... das sich von der byte Anzahl von der von UTF-8 unterscheidet:
Siehe:
Java:
/**
 * 
 */
package de.tutorials;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;

/**
 * @author Tom
 * 
 */
public class UTFStringInRadomAccessFileExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        String str = "Y7832adbadskhqßo1pöl32wklqe0ß\"as2\\²11aX";
        System.out.println(str.getBytes("UTF-8").length);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        DataOutputStream dataOutputStream = new DataOutputStream(
                byteArrayOutputStream);
        dataOutputStream.writeUTF(str);
        System.out.println(byteArrayOutputStream.toByteArray().length);
    }
}

Gruß Tom
 
Thx für die Antwort, aber ich hab einfach mal eine Datei angelegt und 30 Zeichen in diese Datei geschrieben und dann mit der Methode length() der Klasse RandomAccessFile() überprüf, wie groß die Datei ist. Herausgekommen ist, dass sie 32Byte groß ist, da vor jeden Eintrag der mit der Klasse writeUTF(String) geschrieben wird noch die Länge des übergebenen Strings als int gespeichert wird.
Hätte ich eigentlich schon früher drauf kommen können:-)
 
Zurück