Независимо от платформы, определите, является ли файл разреженным [дубликат]JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Независимо от платформы, определите, является ли файл разреженным [дубликат]

Сообщение Anonymous »

Я пытаюсь определить, является ли данный файл разреженным. Я знаю, что есть способ проверить, используя собственный API Windows, и что в системах на базе Unix есть команда stat для получения чисел для логического размера и фактических выделенных блоков. Однако мой проект старается не использовать собственный код и не запускать лишние процессы. Есть ли в Java что-нибудь, позволяющее определить, является ли файл разреженным?
Моя первоначальная попытка использования ChatGPT привела к следующему:

Код: Выделить всё

public static boolean isSparseFile(Path path) throws IOException {
// Get the logical size of the file
long logicalSize = Files.size(path);

// Read the file to calculate the actual size
long actualSize = 0;
try (var stream = Files.newInputStream(path)) {
byte[] buffer = new byte[4096]; // Read in chunks
int bytesRead;
while ((bytesRead = stream.read(buffer)) != -1) {
for (int i = 0; i < bytesRead; i++) {
if (buffer[i] != 0) {
actualSize += bytesRead; // Count only non-zero bytes
break; // We only need to count once per chunk
}
}
}
}

// If the actual size is significantly less than the logical size, it's sparse
return actualSize < logicalSize;
}
Но этот метод кажется подозрительным. Похоже, что он определит файл как «разреженный» только в том случае, если есть выровненный по частям раздел размером 4096 нулевых байт, и в противном случае просто прочитает весь размер файла (в этом случае почему бы не прервать первый найденный нулевой блок когда bytesRead != -1?). Это создает риск того, что файл будет разреженным с частями меньше 4096 или с нулевым чаном больше 4096, который выходит за границу фрагмента. Кроме того, я не могу найти в Интернете код, подтверждающий этот метод. Также вполне возможно, что файл с пустым пространством не был разрежен файловой системой и в любом случае для этих пустых пространств выделены блоки. Этот метод все равно объявит этот файл разреженным.


Подробнее здесь: https://stackoverflow.com/questions/791 ... -is-sparse
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Вычисление CrossEntropyLoss по разреженным тензорам
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как обрабатывать функцию потерь с разреженным выходом
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как обрабатывать функцию потерь с разреженным выходом
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как обрабатывать функцию потерь с разреженным выходом
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Определите объект как уникальный в наборе, независимо от порядка элементов списка внутри данного объекта.
    Anonymous » » в форуме JAVA
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»