È difficile dire cosa succederà alla fine a livello di unità. Tra il tuo programma Java e le testine fisiche del disco rigido ci saranno più fasi di buffering e scheduling che cercano di rendere più efficiente il processo di scrittura.
In primo luogo, il file system del sistema operativo può salvare l'output in modo asincrono e inviarlo al driver del dispositivo in un momento opportuno. Questo è noto come cache write-behind. Può avere una politica, non scrivere nulla per molto tempo mentre nessuno vuole leggerlo. Ciò può migliorare le prestazioni perché la scrittura sequenziale di molti dati nello stesso file è in genere più veloce rispetto alla scrittura di piccoli pezzi di file diversi in modo alternato.
Poiché un disco rigido è essenzialmente un dispositivo a blocchi, il software del driver può accumulare l'output e attendere altro. Dopo aver impilato un paio di blocchi completi o dopo che è passato un po 'di tempo, potrebbe decidere di infastidire il dispositivo con nuovi blocchi da scrivere.
Quindi il dispositivo stesso avrà un file system a un livello inferiore (non conosce i file ma sa dove sono i blocchi sul disco e quanto costosa sarà scrivere un blocco particolare, dato dove sono le teste al momento). Quindi impilerà i blocchi che riceve dal driver e individuerà una sequenza intelligente per scriverli sul disco, evitando il più possibile movimenti della testa il più possibile.
Quindi non ti rimane molto che ti preoccupi e non hai praticamente alcun controllo sull'ordine che le cose finiranno sul disco se stai scrivendo molto velocemente, indipendentemente dall'ordine che scegli a livello di applicazione. Se le prestazioni di scrittura sono importanti per la tua applicazione, il meglio che puoi fare è provare alcuni scenari diversi e vedere come funzionano nel tuo sistema.