Я пытаюсь записать в файл определенное количество байтов, скажем, x байтов со значением y.Проблема в том, что я делаю это много времени, и в настоящее время я использую DataOutputStream с BufferedOutputStream и метод записи, который получает массив байтов.Каждый раз я выделяю новый массив байтов длины x и записываю его.Это расточительно, и мне интересно, есть ли более эффективный способ?Спасибо.
Редактировать: я реализовал это, выделив большой массив, который растет по требованию, но проблема в том, что я храню его, и он может стать очень большим.Код:
byte[] block = new byte[4096];
try {
for(int i=0; i<nameOccurence.length; ++i){
if(nameOccurence[i] >= block.length){
int size = ((Integer.MAX_VALUE - nameOccurence[i]) <= 0.5*Integer.MAX_VALUE) ? Integer.MAX_VALUE : (nameOccurence[i] * 2);
block = new byte[size];
}
if(nameOccurence[i] == 0){
namePointer[i] = -1;//i.e. there are no vertices with this name
continue;
}
namePointer[i] = byteCounter;
ds.writeInt(nameOccurence[i]);
ds.write(block, 0, nameOccurence[i]*2);
ds.write(block, 0, nameOccurence[i]*2);
byteCounter += (4*((long)nameOccurence[i]))+4;//because we wrote an integer.
}
, где ds - это DataOutputStream.Обратите внимание, что блок массива может увеличиваться до max int, если nameOccurence [i] достаточно велико.
Я думаю, что лучший способ - найти максимальное число для всех i в nameOccurence и выделить массив этой длины.,Проблема в том, что он может получить Integer.MAX_VALUE.
Может быть, будет лучше работать с циклом и записывать 1 байт каждый раз?обратите внимание, что основой DataOuputStream является BufferedOutputStream.