Создать файл с заданным размером в Java

Есть ли эффективный способ создания файла с заданным размером в Java?

В C это можно сделать с помощью ftruncate (см. Этот ответ ).

Большинство людей просто пишут n фиктивных байтов в файл, но должен быть более быстрый способ. Я думаю о ftruncate, а также о разреженных файлах …

Создайте новый RandomAccessFile и вызовите метод setLength, указав желаемую длину файла. В основе реализации JRE следует использовать наиболее эффективный метод, ansible в вашей среде.

Следующая программа

import java.io.*; class Test { public static void main(String args[]) throws Exception { RandomAccessFile f = new RandomAccessFile("t", "rw"); f.setLength(1024 * 1024 * 1024); } } 

на машине Linux будет выделять пространство, используя ftruncate (2)

 6070 open("t", O_RDWR|O_CREAT, 0666) = 4 6070 fstat(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 6070 lseek(4, 0, SEEK_CUR) = 0 6070 ftruncate(4, 1073741824) = 0 

в то время как на машине Solaris будет использоваться функция F_FREESP64 системного вызова fcntl (2).

 /2: open64("t", O_RDWR|O_CREAT, 0666) = 14 /2: fstat64(14, 0xFE4FF810) = 0 /2: llseek(14, 0, SEEK_CUR) = 0 /2: fcntl(14, F_FREESP64, 0xFE4FF998) = 0 

В обоих случаях это приведет к созданию разреженного файла.

Вы можете открыть файл для записи, искать смещение (n-1) и написать один байт. ОС автоматически расширит файл до необходимого количества байтов.

  • Пакетный эквивалент обратных ссылок Баша
  • Лучший способ писать байты в середине файла в Java
  • Как прочитать содержимое файла в строке в C?
  • Как заполнить HashMap из файла свойств java с помощью Spring @Value
  • Как загрузить файл в angularjs e2e испытание protractorа
  • Проверить, существует ли файл
  • Получить тип файла в Cocoa
  • В чем разница между итерацией по файлу с помощью foreach или в Perl?
  • Вложенные с помощью операторов в C #
  • firebase database против плоских файлов
  • Независимые от платформы пути в Java
  • Давайте будем гением компьютера.