Я делаю программу обмена файлами для моей локальной сети и отправляю данные с клиента 1 на сервер, который отправляет их клиенту 2.
Проблема в том, что размер моего буфера 8192 байта, и когда я читаю определенный файл, если он не идеально делится с размером буфера, оставшаяся часть будет зависать в потоке, пока не будет добавлен другой файл, и объем данных, наконец, достигнет размера буфера .
Есть ли способ остановить блокировку read () до достижения порогового значения? Или просто обойти всю ситуацию?
Я знаю, что все пакеты отправлены, потому что я их посчитал, и при подсчете количества пакетов, обработанных сервером, он на единицу меньше полученного.
Вот код сервера:
public void processFile(DataInputStream input){
try {
int iteration = 0;
byte[] buffer = new byte[bufferSize];
int count;
while ((count = input.read(buffer)) > 0){
input.read(buffer);
for (DataOutputStream output : outputs)
output.write(buffer, 0, count);
System.out.println("batch n. " + iteration);
iteration++;
}
System.out.println("DONE");
} catch (IOException io){
io.printStackTrace();
}
}
Код клиента (для отправки, получения во многом совпадает с сервером):
fileInput = new FileInputStream(file);
byte[] fileName = file.getName().getBytes();
// dataOutput.write(fileName, 0, fileName.length);
System.out.println(new String(fileName));
while ((count = fileInput.read(buffer)) > 0){
System.out.println("Send n. " + iteration);
dataOutput.write(buffer, 0, count);
iteration++;
}
System.out.println("finished sending");
fileInput.close();