Почему SplFileInfo возвращает неправильный размер [дубликат]

Это потому, что Java выполняет статический раздел, чтобы он был объявлен. В вашем случае последовательность

  1. new MyClass
  2. new Object

Когда # 1 выполняется, obj все еще не инициализирован , поэтому он печатает нуль. Попробуйте следующее, и вы увидите разницу:

class MyClass {
  private static final Object obj = new Object();
  private static MyClass myClass = new MyClass();
  public MyClass() {
    System.out.println(obj); // will print null once
  }
}

Вообще говоря, лучше избегать такой конструкции все вместе. Если вы пытаетесь создать синглтон, вот как выглядит этот фрагмент кода:

class MyClass {

  private static final MyClass myClass = new MyClass();

  private Object obj = new Object();

  private MyClass() {
    System.out.println(obj); // will print null once
  }
}
18
задан Andrew Cooper 20 September 2010 в 01:06
поделиться

3 ответа

В системах на базе Linux данные, полученные с помощью filesize(), «statcached».

Попробуйте вызвать clearstatcache(); перед вызовом filesize.

36
ответ дан Pekka 웃 21 August 2018 в 17:50
поделиться

Согласно руководству PHP:

Результаты этой функции кэшируются. Подробнее см. Clearstatcache ().

http://us2.php.net/manual/en/function.filesize.php

В основном, вы должны очистить кеш статистики после операции с файлом:

$fileOut = fopen($filepath.$filename, "ab")
fwrite($fileOut, base64_decode($data));
fflush($fileOut);
fclose($fileOut);

clearstatcache();

$newSize = filesize($filepath.$filename);
7
ответ дан Chris Laplante 21 August 2018 в 17:50
поделиться

PHP хранит все метаданные файлов, которые он читает в кеше, поэтому вполне вероятно, что размер файла уже сохранен в этом кеше, и вам нужно его очистить. См. clearstatcache и вызовите его перед вызовом filesize.

2
ответ дан Juan 21 August 2018 в 17:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: