Agregando BOM a un XML

hola buenas tardes bueno estoy agregando lo que es el Byte Order Marker a mis facturas en xml y para eso agrego 3 bytes al inicio del archivo pero no me los agrega me los substituye los 3 primeros bytes del xml como podria hacer para que se agregen

public static void main (String[] args) throws IOException {
      BufferedWriter bw = null;
      OutputStreamWriter osw = null;
       
         
      File f = new File(args[0]);
      RandomAccessFile raf = new RandomAccessFile(f, "rw");

       try {
            // escribe UTF8 BOM mark
         raf.seek(0);
            final byte[] bom = new byte[] { (byte)0xEF, (byte)0xBB, (byte)0xBF };
            raf.write(bom);
         raf.seek(3);

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

sobreescribir todo

Necesitas sobreescribir todo. Una opción es que hagas un nuevo archivo (no necesitas RandomAccessFile, solamente un FileOutputStream), escribas ahí los 3 bytes que necesitas, luego copies (con un FileInputStream) el resto del archivo original al nuevo, cierres ambos, borres el viejo, y muevas el nuevo a donde estaba el viejo...