#java
Вопрос:
С рассматриваемыми файлами отправитель считывает строки из файла и передает пакет, сохраняя переменную для номера строки, и после прочтения последней строки значение номера строки больше не увеличивается
В файле чтения он распаковывает пакет, печатает его в выходной файл и отображает то, что было передано, мне нужно, чтобы он прекратил запись в файл после того, как он закончит последнюю строку входного файла, но у меня нет возможности отследить это в получающем файле
Я пытался использовать статическое значение int для номера строки, но всякий раз, когда оно вызывается на принимающей стороне, проверка числа возвращает экземпляр 0 вместо текущего значения, рассматриваемый код-это разные методы в разных классах, я пытался сделать логический файл статическим и вызвать его для сравнения в приемнике, но опять же он всегда возвращает значение по умолчанию false
Я открыт для всех предложений, так как ничего из того, что я нахожу в Интернете, не работает, спасибо за любые ответы
byte[] getMessageToSend() { // sending code long endTime = System.nanoTime(); try (Streamlt;Stringgt; lines = Files.lines(Paths.get(fileName))){ line = lines.skip(lineNum).findFirst().get(); lineNum ; return line.getBytes(); } catch(Exception e){ if(!fileFinish){ fileFinish = true; long elapsedTime = (endTime - start)/1000000; System.out.println("Time to send " lineNum " lines of file " fileName ": " elapsedTime " milliseconds"); } } System.out.println("Please enter a message to send: "); try { BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); String sentence = inFromUser.readLine(); if(null == sentence) System.exit(1); System.out.println("Sending: " sentence); return sentence.getBytes(); } catch(Exception e) { System.out.println("IO error: " e); return null; } }
void deliverMessage(Packet packet) { //receiving code byte[] payload = new byte[packet.length]; for(int i=0; ilt;payload.length; i ) payload[i] = packet.payload[i]; String recvd = new String(payload); //int lineNumber = ParSender.lineNum; //System.out.println("line number " lineNumber); //if(lineNumber gt; 0){ try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("output.txt", true)))){ out.println(recvd); System.out.println("received payload len: " recvd.length()); } catch (IOException e){} //} //else System.out.println("Received " packet.length " bytes: " new String(payload)); }
Комментарии:
1. Попробуй
static volatile fileFinish
.