Зачем нам нужен метод hasArray () в CharBuffer?

Чистый ответ - потратить немного времени на правильную подготовку среды выполнения.

Первым методом, который вы должны подготовить среду исполнения, является использование файла matplotlibrc, как разумно рекомендованный Крисом К. , установив

backend : Agg

в этом файле. Вы можете даже контролировать - без изменений кода - , как и где ищет matplotlib, и находит файл matplotlibrc .

Второй метод, который вы должны подготовить для своей среды выполнения, - это используйте переменную среды MPLBACKEND (и сообщите своим пользователям об использовании):

export MPLBACKEND="agg"
python 

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

Жесткое кодирование вашего backplan matplotlib для «Agg» в вашем коде на Python похоже на избиение квадратный колышек в круглое отверстие с большим молотком, когда вместо этого вы могли просто сказать matplotlib, что это должно быть квадратное отверстие.

0
задан user10777718 31 March 2019 в 15:36
поделиться

1 ответ

Условием для hasArray является

(hb != null) && !isReadOnly

isReadOnly, если вы, например, используете asReadOnlyBuffer

CharBuffer.allocate(20).asReadOnlyBuffer();

.
Так что да, нам это нужно.


Возьмите эту строку

final CharBuffer cb = instance.getCharBuffer(...);

Это только для чтения или нет? Содержит ли он действительный массив char[]? Мы действительно не знаем. Если мы сделаем

cb.array();

и это буфер только для чтения, мы получим ReadOnlyBufferException.
Если он не поддерживается массивом char[], мы получаем UnsupportedOperationException.

Итак, что мы могли бы сделать, это

if (cb.hasArray()) {
   final char[] arr = cb.array();
}

Теперь мы находимся Exception в безопасности.
Также вы можете быть уверены, что инженеры Oracle / OpenJDK / whatJDK знают, что они делают;)

0
ответ дан LppEdd 31 March 2019 в 15:36
поделиться
Другие вопросы по тегам:

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