2010-11-14 3 views
1

Могу ли я использовать емкость, чтобы найти фактический размер или длину ShortBuffer? Из того, что я прочитал, он возвращает количество элементов, содержащихся в буфере. Но слово «способность» настолько неоднозначно. Если я помещу массив из 5 шорт в этот буфер, будет ли емкость всегда возвращать 5?Is ShortBuffer.proacity такой же размер или длина

+0

Емкости не является неоднозначной слово. ca · pac · i · ty (существительное) 1. максимальная сумма, которую может содержать что-то. – Patrick

ответ

5

№. Емкость - это объем данных, который буфер эффективно может провести сейчас. Это не значит, что у данных было написано.

Если вы положили массив из 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 
    } 
} 

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

+0

Thanx! Итак, чтобы очистить. Если я выделяю именно то, что мне нужно, а затем использую его как буфер только для чтения, емкость вернет это число - во всех случаях? Некоторые буферы, как известно на некоторых языках, иногда могут выделять больше памяти, чем необходимо. И поэтому бесполезно использовать его емкость в качестве ссылки на размер. – Espen

+0

@Espen: Я так считаю. Если вы попытаетесь написать выше емкости NIO-буфера, это вызовет исключение. –

+0

@Espen - javadoc четко заявляет, что nio Buffer не выделяет больше памяти; см. цитируемый текст в моем ответе. –

1

Да. Согласно Buffer (который является суперклассом ShortBuffer) reference:

«Объем буфера - это количество элементов, которые он содержит».

+0

Это то, что он буквально говорит, но на практике я думаю, что это означает * что-то еще; см. мой ответ. –

2

Да, Вместимость возвращает максимальное количество элементов в буфере. Если вы инициализируете его вместимостью 5, его емкость будет всегда равна 5. Конечно, это не означает, что она обязательно будет содержать 5 элементов.

2

Если я помещу массив из 5 шорт в этом буфере, емкость будет всегда возвращать 5?

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

Буфер Javadoc говорит, что это:

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

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

  • Предел буфера - это индекс первого элемента, который не должен быть читать или писать. Предел буфера равен никогда не отрицательный и никогда не бывает больше , чем его емкость.

  • Позиция буфера - это индекс следующего элемента, подлежащего чтению, или .Позиция буфера никогда не отрицательная и никогда не превышает ее предела .

Хотя формулировка оставляет желать лучшего, я усмотреть различие между числом элементов он может содержать (capacity), а число элементов он в настоящее время содержит; обычно (limit - position) при считывании или position при записи.

Это подкрепляется javadocs для методов allocate(int) и put(short). В первом утверждается, что параметр дает емкость буфера, а последний НЕ указывает, что put будет обновлять емкость буфера.

(С другой стороны, можно утверждать, что буфер буквально означает «содержит» емкость элементы во все времена, но некоторые из этих элементов не являются «действительным» данные.)

Смежные вопросы