Файлы с отображенной памятью в Java

Я считаю, что вопрос не в том, можно ли вызвать статический член класса, вызвав ClassName::staticMember. Вопрос заключался в том, в чем разница между использованием self::classmember и $this->classmember.

Например, оба следующих примера работают без ошибок, используете ли вы self:: или $this->

class Person{
    private $name;
    private $address;

    public function __construct($new_name,$new_address){
        $this->name = $new_name;
        $this->address = $new_address;
    }
}

class Person{
    private $name;
    private $address;
    public function __construct($new_name,$new_address){
        self::$name = $new_name;
        self::$address = $new_address;
    }
}
8
задан Charles 17 November 2011 в 17:15
поделиться

4 ответа

Кто-нибудь действительно проверял, были ли ByteBuffers созданы с помощью поддержки отображения памяти, вызывая .array () в первую очередь, независимо от режима чтения / чтения ?

Насколько я могу судить, по моим поискам, ответ - НЕТ . Способность ByteBuffer возвращать прямой массив byte [] через ByteBuffer.array () регулируется наличием ByteBuffer.hb ( byte [] ), который всегда устанавливается в ноль при создании MappedByteBuffer .

Что отстой для меня, потому что я надеялся сделать что-то подобное что хотел сделать автор вопроса.

10
ответ дан 5 December 2019 в 08:25
поделиться

Всегда хорошо не изобретать колеса. Apache предоставил прекрасную библиотеку для выполнения операций ввода-вывода. Взгляните на http://commons.apache.org/io/description.html

Вот сценарий, который он обслуживает. Предположим, у вас есть данные, которые вы бы предпочитают хранить в памяти, но вы не знаете заранее, сколько данных там будет. Если их слишком много, вы хотите записать это на диск вместо использования памяти, но вы не хотите записывать на диск, пока не необходимо, потому что диск медленный и является ресурсом, который необходимо отслеживать для cleanup.

Итак, вы создаете временный буфер и начинаете писать в него. Если / когда вы достичь порога того, что вы хотите сохранить в памяти, вам необходимо создать файл, записать в этот файл содержимое буфера и записать все последующие данные в файл вместо буфера.

Это то, что делает за вас DeferredOutputStream . Он скрывает все беспорядки вокруг в точке переключения. Все, что вам нужно сделать, это создать отложенный поток, в первую очередь настройте порог, а затем просто напишите сколько душе угодно.

РЕДАКТИРОВАТЬ: Я только что провел небольшой повторный поиск с помощью Google и нашел эту ссылку: http://lists.apple.com/archives/java-dev/2004/Apr/msg00086.html (Молниеносно быстрое чтение / запись файлов). Очень впечатляет.

5
ответ дан 5 December 2019 в 08:25
поделиться

Обертка byte [] не замедлит работу ... не будет никаких огромных копий массива или других мелких проблем с производительностью. Из JavaDocs: java.nio.ByteBuffer .wrap ()

Оборачивает байтовый массив в буфер.

Новый буфер будет поддерживаться данным байтовым массивом; то есть модификации буфера вызовут массив, который нужно изменить, и наоборот наоборот. Емкость нового буфера и предел будет array.length, его позиция будет нулевая, а ее отметка будет неопределенным. Его поддерживающий массив будет заданным массивом, а его массив смещение будет равно нулю.

4
ответ дан 5 December 2019 в 08:25
поделиться

Использование функции ByteBuffer.wrap () не требует больших затрат. Он выделяет простой объект и инициализирует несколько целых чисел. Таким образом, написание вашего алгоритма с использованием ByteBuffer - лучший вариант, если вам нужно работать с файлами, доступными только для чтения.

1
ответ дан 5 December 2019 в 08:25
поделиться
Другие вопросы по тегам:

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