Я пишу код для загрузки файла с клиента на мой сервер, и производительность не так высока, как я думаю.
У меня есть текущий фрагмент кода, который выполняет передачу файлов, и мне было интересно, как я могу ускорить передачу.
Извините за весь код:
InputStream fileItemInputStream ;
OutputStream saveFileStream;
int[] buffer;
while (fileItemInputStream.available() > 0) {
buffer = Util.getBytesFromStream(fileItemInputStream);
Util.writeIntArrToStream(saveFileStream, buffer);
}
saveFileStream.close();
fileItemInputStream.close();
Методы Util следующие:
public static int[] getBytesFromStream(InputStream in, int size) throws IOException {
int[] b = new int[size];
int count = 0;
while (count < size) {
b[count++] = in.read();
}
return b;
}
и:
public static void writeIntArrToStream(OutputStream out, int[] arrToWrite) throws IOException {
for (int i = 0; i < arrToWrite.length; i++) {
out.write(arrToWrite[i]);
}
}




Чтение одного байта за раз будет ужасно неэффективным. Вы также полагаетесь на available, что редко бывает хорошей идеей. (Он вернет 0, если нет доступных байтов В данный момент, но могут появиться другие.)
Это правильный код для копирования потока:
public void copyStream(InputStream input, OutputStream output) throws IOException
{
byte[] buffer = new byte[32*1024];
int bytesRead;
while ((bytesRead = input.read(buffer, 0, buffer.length)) > 0)
{
output.write(buffer, 0, bytesRead);
}
}
(Вызывающий должен закрыть оба потока.)
Это mp3 файлы, если это важно
Нет, не знаешь. Это просто чтение и запись, а не выполнение каких-либо арифметических операций или преобразований.
И / или изучите использование классов BufferedInput / OutputStream.
разве мне не нужно беспокоиться о моих беззнаковых байтах в файле, переполненных подписанными байтами Java?