Из вопроса ОП проблема заключалась в использовании смещения в буфере.
Javadoc для DataOutputStream.write (выделение добавлено)
public void write (byte [] b, int off, int len) выдает IOException
Записывает len байтов из указанного байтового массива , начиная со смещения с , в основной выходной поток. Если исключение не выдается, значение счетчика увеличивается на len.
Итак, java.lang.IndexOutOfBoundsException
был результатом этой строки:
DOS.write(buf, k*1000, buf.length);
Всегда используя «0» для смещения, .write(...)
запишет количество байтов (в данном случае длину буфера), начиная с от смещения (которое должно быть 0 ). ОП всегда хорошо заполнял буфер в каждой итерации цикла.
Так что меняется на что-то вроде:
for( k=0;k<100;k++) {
buf=bufferFiller( buf);
DOS.write(buf, 0, buf.length);
acc++;
}
должен решить проблему.