4バイトで1項目なのですが、以下のように場合によって

if(apu.volume1_enable) {
data[0] = (byte)0x00;
data[1] = (byte)0xFF;
data[2] = (byte)0xE2;
data[3] = (byte)(AUDIO_VOL[apu.volume1] & 0x3F);
}

返し値に書き込むかどうかを決定させたいのです。
その場合、data[]は可変長になるのですが、
これを上手く書く事ができません。
ByteArrayOutputStream.toByteArrayでやってみたり、
書き込んだサイズをカウントしておいて、
カウントしたサイズの配列にコピーしたりやってみたのですが、
速度が遅くなってしまいました。どなたか上手い書き方を教えていただけないでしょうか。