У меня очень небольшое потоковое приложение, которое собирает небольшие массивы данных в массивы (потому что это звуковые данные, а Java хочет, чтобы это был массив) и пытается поместить их в ArrayList для хранения.Все это, по сути, является передней частью модели «производитель / потребитель».
Проблема: похоже, не работает.
На стороне продюсера у меня есть этот код:
public synchronized void run() {
// do a whole bunch of audio set-up
try {
// more audio stuff
while (true) {
if (producing) {
byte[] data = new byte[line.getBufferSize() ];
numBytesRead = line.read(data, 0, data.length);
System.out.println("Producer: Size of dat[] is " + data.length);
// Save this chunk of data.
buffer.addData(data);
}
Это кажется простым, если не считать аудио и бухгалтерию.
В классе буфера у меня есть:
public class Buffer {
ArrayList list ;
public void addData(byte[] data) {
list.addAll(Arrays.asList(data));
}
Это тоже кажется простым.Вот проблема: если мой массив имеет длину, скажем, 1024, и все элементы там есть (что я и подтвердил), я бы ожидал, что размер ArrayList будет увеличиваться на 1024 при каждом добавлении данных.Это не так.Он увеличивается на 1, как если бы я делал ArrayList of ArrayLists или ArrayList of Arrays, а не Arraylist элементов, которые я желаю.
Я подозреваю, что у меня возникнет эта проблема с обратной стороныа также, где у меня может быть ArrayList в десятки тысяч байтов, и я хочу получить массив первых 1024 элементов.
Не могу помочь, но думаю, что упускаю что-то очень простое.Может кто-нибудь пролить свет на то, почему это не работает?(Или, если есть какой-то принципиально лучший способ сделать то, что я пытаюсь сделать?)