Могу ли я использовать емкость, чтобы найти фактический размер или длину ShortBuffer? Из того, что я прочитал, он возвращает количество элементов, содержащихся в буфере. Но слово «способность» настолько неоднозначно. Если я помещу массив из 5 шорт в этот буфер, будет ли емкость всегда возвращать 5?Is ShortBuffer.proacity такой же размер или длина
ответ
№. Емкость - это объем данных, который буфер эффективно может провести сейчас. Это не значит, что у данных было написано.
Если вы положили массив из 5 шорт в буфер с большей емкостью, это не изменит емкость, но оно будет изменить позицию. Например:
import java.nio.*;
public class Test {
public static void main(String[] args) throws Exception {
ShortBuffer buffer = ShortBuffer.allocate(100);
short[] data = new short[5];
buffer.put(data);
System.out.println(buffer.capacity()); // Prints 100
System.out.println(buffer.position()); // Prints 5
}
}
Конечно, если вы только инициализируете буфер необходимой емкостью, это будет то же самое. Но вам нужно понять разницу между ними. Если вы представляете, что буфер является пустым листом бумаги с подкладкой, то количество всех линий доступно на бумаге в целом, тогда как позиция фактически покажет положение следующей пустой строки .
Thanx! Итак, чтобы очистить. Если я выделяю именно то, что мне нужно, а затем использую его как буфер только для чтения, емкость вернет это число - во всех случаях? Некоторые буферы, как известно на некоторых языках, иногда могут выделять больше памяти, чем необходимо. И поэтому бесполезно использовать его емкость в качестве ссылки на размер. – Espen
@Espen: Я так считаю. Если вы попытаетесь написать выше емкости NIO-буфера, это вызовет исключение. –
@Espen - javadoc четко заявляет, что nio Buffer не выделяет больше памяти; см. цитируемый текст в моем ответе. –
Да. Согласно Buffer
(который является суперклассом ShortBuffer
) reference:
«Объем буфера - это количество элементов, которые он содержит».
Это то, что он буквально говорит, но на практике я думаю, что это означает * что-то еще; см. мой ответ. –
Да, Вместимость возвращает максимальное количество элементов в буфере. Если вы инициализируете его вместимостью 5, его емкость будет всегда равна 5. Конечно, это не означает, что она обязательно будет содержать 5 элементов.
Если я помещу массив из 5 шорт в этом буфере, емкость будет всегда возвращать 5?
Я думаю, что реальный ответ - нет. Способность буфера определяется параметром, который вы предоставляете при распределении буфера, а не количеством элементов, которые вы вставляете в него.
Буфер Javadoc говорит, что это:
Буфер представляет собой линейную, конечная последовательность элементов определенного типа примитивного . Помимо его содержания, существенных свойств буфера являются его емкость, ограничение, а также позиций:
емкостью буферной является количеством элементов, которые он содержит. Емкость буфера никогда не отрицательна и никогда не изменяется.
Предел буфера - это индекс первого элемента, который не должен быть читать или писать. Предел буфера равен никогда не отрицательный и никогда не бывает больше , чем его емкость.
Позиция буфера - это индекс следующего элемента, подлежащего чтению, или .Позиция буфера никогда не отрицательная и никогда не превышает ее предела .
Хотя формулировка оставляет желать лучшего, я усмотреть различие между числом элементов он может содержать (capacity
), а число элементов он в настоящее время содержит; обычно (limit - position)
при считывании или position
при записи.
Это подкрепляется javadocs для методов allocate(int)
и put(short)
. В первом утверждается, что параметр дает емкость буфера, а последний НЕ указывает, что put
будет обновлять емкость буфера.
(С другой стороны, можно утверждать, что буфер буквально означает «содержит» емкость элементы во все времена, но некоторые из этих элементов не являются «действительным» данные.)
- 1. такой же класс, другой размер ...?
- 2. ImageButton не такой же размер
- 3. Размер char * такой же, как размер int *?
- 4. размер или длина объекта документа
- 5. b2Body не такой же размер, как CCSprite?
- 6. Ą не такой же размер, как T
- 7. обернуть изображение и заставить такой же размер
- 8. такой же размер listboxitems в wpf
- 9. Is int * number_1 такой же, как int * number_1?
- 10. Is Solr Распределенный поиск такой же, как в Federated Search?
- 11. Как использовать такой же размер, как размер изображения, используя Picasso
- 12. ли база обратно размер такой же, как размер базы данных
- 13. Размер буфера глубины такой же, как размер порта просмотра?
- 14. Размер окна такой же, как размер фонового изображения в WPF
- 15. Интерфейс Is Go {} такой же, как void * в C?
- 16. JTextArea с теми же параметрами, но не такой же размер
- 17. MongoJS: размер() метод или длина не доступна
- 18. Почему нет такой шины данных, которая имеет такой же размер, как размер строки кэша?
- 19. Размер/длина QScrollBar
- 20. Is & arr [размер] действительный?
- 21. ggplot2 Ошибка: Эстетика должна быть либо длина один, или такой же длины, как dataProblems: цвета, буквы
- 22. visualvm сохраненный размер такой же после использования мухи шаблон
- 23. Автоматически изменяет размер изображений до такой же ширины на wordpress
- 24. Размер содержимого iframe точно такой же, как iframe
- 25. такой же пакетный, но различный размер партии генерирует разный результат
- 26. Принуждение два ряда-жидкость, чтобы быть такой же размер
- 27. Рекурсивный спуск такой же префикс
- 28. размер и длина chararray не то же самое
- 29. Процент подсчета, если размер такой же, но вес другой
- 30. Поведение realloc, когда новый размер такой же, как старый
Емкости не является неоднозначной слово. ca · pac · i · ty (существительное) 1. максимальная сумма, которую может содержать что-то. – Patrick