Хорошо, как это закодировано, поле 'outgoingData' имеет вид:
1) Инициализируется длиной 512
2) Затем, в sendWRQ (), outgoingDataповторно инициализируется для того, что отправляет обратно rrq.getBytes ().
3) Затем в sendData () в качестве промежуточного буфера используется outgoingData для чтения данных из файла и помещения их в объект dataTransfer..
Однако, поскольку на шаге 2 повторно инициализируется outgoingData, предположение на шаге 3, что длина outgoingData по-прежнему составляет 512 байт, является ложным.
Так что пока EJPПравильно было сказать, что использование read (outgoingData, 0, outgoingData.length ()) будет работать, но есть некоторые проблемы с архитектурой, которые, если вы решите проблему, устранят множество потенциальных ошибок.
Например,:
С предоставленным кодом, по-видимому, нет причин объявлять исходящие данные на уровне класса и совместно использовать их между двумя функциями.В зависимости от остальной части приложения, это может привести к поточности.Возможно byte [] buffer = rrq.getBytes ();в sendWRQ () и byte [] buffer = новый байт [1024];в sendData ().Кроме того, параметр «данные» находится на уровне класса .... по какой причине?Может быть лучше контролировать его, если передан параметр in.
Наконец, мне повезло с использованием цикла do {} while () в сетевых ситуациях.Гарантирует, что send () получит хотя бы один шанс отправить данные И сделает код более читабельным.